我有2个共享库: lib1.so 和 lib2.so 。
lib1.so 包含一些在 lib2.so 中定义的函数。在C程序中,我使用以下调用加载 lib1.so :
dlopen( "lib1.so", RTLD_NOW );
两个库都显示在当前目录中。我的程序在桌面Linux(Ubuntu,Debian)下工作,但不在Android下。在Android下,dlopen返回一个错误并退出。我试着设置:
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:.
但它没有帮助。
我完全感到困惑,为什么这段代码在Android下不起作用。我在Android的动态链接器上找不到任何好的文档。所以,我没有解释为什么它不起作用。
详情:
答案 0 :(得分:2)
确定。我刚刚找到了解决方案。将-lgcc添加到lib1.so的链接器选项已解决了它。看起来编译器已经自动生成了一些来自libgcc的特殊内置函数的调用。它还需要-lc,因为编译器还会自动生成对memcpy的特殊调用。
答案 1 :(得分:1)
如果dlopen
由于某种原因无效,您是否尝试过调用dlerror
来找出真正的问题是什么?
答案 2 :(得分:0)
我对你的项目不太确定。 但我认为,最好使用System.loadLibrary从服务加载库。
的System.loadLibrary(lib.so); 在您的情况下,首先加载lib2.so然后只加载lib1.so