无法加载库“libdl.so.2”

时间:2014-04-16 13:51:54

标签: android java-native-interface native

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

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):无法加载“libXXX_embedded_shared.so”所需的库“libdl.so.2”;由load_library(linker.cpp:746)引起:未找到库“libdl.so.2”

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

你能指点一下我在这里缺少什么吗?

1 个答案:

答案 0 :(得分:3)

你不能这样做。

Android和普通的Linux具有截然不同的用户空间,特别是它们使用完全不同的C库和相关的不兼容的动态链接器。

对版本化库名称的渴望(.so.2 - Android当前没有做的事情)表明该库不是为Android构建的。

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

有些人设法在root用户设备上使用普通的linux用户空间组件,只需在chroot中安装一个最小的debian-arm或类似设备,但这需要root设置,并且不能通过jni从应用程序进程链接无论如何。您的申请流程已经与Android的C库紧密相关,因此您无法真正替代其他人。