我一直试图在我的android应用程序中使用linux编译的预建共享库,但是当我试图运行该应用程序时,它会出现以下错误:
04-16 19:09:13.633: E/dalvikvm(11810):dlopen("/data/app-lib/com.lXXXX.XXXX.connect-2/libXXX_embedded_shared.so")失败:无法加载库: soinfo_link_image(linker.cpp:1636):无法加载库"libdl.so.2“”libXXX_embedded_shared.so“所需的;由load_library(linker.cpp:746)引起的:库”libdl.so.2“未找到
我在android/system/lib中找不到libdl.so.2,但是有一个库libdl.so试图加载,但它仍然没有解决依赖关系。
你能告诉我我在这里错过了什么吗?
发布于 2014-04-16 16:42:19
你不能这么做。
Android和普通linux有很大的不同的用户空间,特别是它们使用完全不同的C库和相关的不兼容的动态链接器。
想要一个版本化的库名( .so.2 --这是Android目前没有做到的),这表明这个库不是为Android构建的。
您需要使用Android.mk 重新构建所有库,方法是创建和Android.mk以及类似的文件来驱动正常的ndk构建系统,或者使用ndk实用工具生成“独立工具链”,并将项目的构建系统指向最终的android --目标为gcc、ld等。
有些人在根设备上使用了普通的linux用户空间组件,在chroot中只安装了一个完整的debian或类似的组件,但这需要根来设置,而且jni无法从应用程序进程中链接。您的应用程序已经与Android的C库有了很深的联系,所以您无法真正地替代另一个库。
https://stackoverflow.com/questions/23111463
复制相似问题