如何合并多个*.so库文件

如何合并多个*.so库文件,第1张

楼下是正解, 比如有两个共享库liba.so, libb.so, 位于/lib/下, 用g++ 链接时应该是这样子: g++ -L /lib/ -la -lb hello.cpp -o hello

在apk里打包进.so文件的方法

有两种方法,

1 是在Android.mk文件里增加

LOCAL_JNI_SHARED_LIBRARIES := libxxx

这样在编译的时候,NDK自动会把这个libxxx打包进apk;

放在youapk/lib/目录下

2 是在应用的目录下手工建

libs/armeabi

目录,然后把libxxx.so拷贝到这个目录下,

这样NDK就会自动把这个libxxx.so打包进apk,位置还是在

放在youapk/lib/目录下。

在代码里,使用

System.loadLibrary("xxx")

就可以加载这个动态库了。

这里要注意,参数只写xxx就可以了,不需要写libxxx,也不需要写libxxx.so。

还有一点要说明,System.loadLibrary这个函数会在如下路径搜索libxxx.so文件:

/system/lib

/data/data/you apk package/lib

但,如果libxxx.so还依赖其它.so文件,比如libyyy.so,则System.loadLibrary只会

在/system/lib目录下去找,如果没找到,它不会自动到/data/data/you apk package/lib

下去找,这个时候就会报动态库没找到的错;

解决方法是在load libxxx.so之前,先load libyyy.so,如下:

System.loadLibrary("yyy")

System.loadLibrary("xxx")

将文件Hello.c编译成一个动态库:libHello.so,执行命令如下:

$ gcc Hello.c -fPIC -shared -o libHello.so

使用以上两种方法都有一个问题,

gcc生成的so文件并不知道是哪个cup架构下的

cmake在mac上生成的动态链接库,是dyilb文件,不是so文件

所以

使用add_library指定

点击assebleDebug或者assebleRelease,在build/cmake文件夹下生成相应的so文件

通常我们的会编写相应的java文件去调用so库,java文件最好也写成java包的形式

jar的位置在(android studio 版本 3.6.1)build/compile_library_classes


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/tougao/11599330.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-17
下一篇 2023-05-17

发表评论

登录后才能评论

评论列表(0条)

保存