Android 无法加载库“;libdl.so.2“;

Android 无法加载库“;libdl.so.2“;,android,java-native-interface,native,Android,Java Native Interface,Native,我一直尝试在android jni应用程序中使用linux编译的预构建共享库,但当我尝试运行该应用程序时,会出现以下错误: 04-16 19:09:13.633:E/dalvikvm(11810):dlopen(/data/app lib/com.lxxx.XXXX.connect-2/libXXX_embedded_shared.so)失败:无法加载库:soinfo_link_映像(linker.cpp:1636):无法加载库“libdl.so.2”libXXX_embedded_shared

我一直尝试在android jni应用程序中使用linux编译的预构建共享库,但当我尝试运行该应用程序时,会出现以下错误:

04-16 19:09:13.633:E/dalvikvm(11810):dlopen(/data/app lib/com.lxxx.XXXX.connect-2/libXXX_embedded_shared.so)失败:无法加载库:soinfo_link_映像(linker.cpp:1636):无法加载库“libdl.so.2”libXXX_embedded_shared.so”需要的库;由load_库(linker.cpp:746)引起:未找到库“libdl.so.2”

我在android/system/lib中找不到libdl.so.2,但有一个libdl.so库,我试图加载它,但它仍然没有解决依赖关系


你能告诉我这里缺少什么吗?

你不能这样做

Android和普通linux的用户空间大不相同,特别是它们使用完全不同的C库和相关的不兼容动态链接器

想要一个版本化的库名(即.so.2,这是Android目前没有做的),这表明这个库不是为Android构建的

您需要使用android ndk重新构建所有库方法是创建和android.mk及类似文件以驱动正常的ndk构建系统,或者使用ndk实用程序生成“独立工具链”,并将项目的构建系统指向最终的android目标gcc、ld等


有些人通过在chroot中安装debian arm或类似软件,成功地在根设备上使用了普通的linux用户空间组件,但这需要根用户进行设置,而且无论如何jni都无法从应用程序进程链接。您的应用程序进程已经与Android的C库紧密相连,因此您无法真正替代另一个库。

尝试将libdl.so.2符号链接到libdl.so,看看这是否解决了问题。我假设您正在谈论的预构建linux库实际上是一个预构建的android库,它是为您正在使用的正确arm架构编译的。谢谢Alex。我已经尝试将libdl.so符号链接到libdl.so.2,但没有解决问题。你能想点别的我可以试试的吗?