我一直在尝试将 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(链接器) .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 我尝试加载但它仍然没有解决依赖关系。
你能指出我在这里缺少什么吗?
你不可以做这个。
Android 和普通的 Linux 具有截然不同的用户空间,特别是它们使用完全不同的 C 库和相关的不兼容的动态链接器。
对版本化库名称的渴望(.so.2 - Android 目前没有这样做)表明该库不是为 Android 构建的。
您需要使用 android ndk 重建所有库通过创建 Android.mk 和类似文件来驱动正常的 ndk 构建系统,或者使用 ndk 实用程序生成“独立工具链”并将项目的构建系统指向生成的针对 android 的 gcc、ld 等。
有些人通过在 chroot 中放置 debian-arm 或类似的整个最小安装,设法在 root 设备上使用正常的 Linux 用户空间组件,但这需要 root 来设置,并且无论如何都无法通过 jni 从应用程序进程链接。您的应用程序进程已经与 Android 的 C 库紧密相关,因此您无法真正替代另一个库。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)