安卓NDK : dlopen failed

标签 android android-ndk

我有一个奇怪的错误,上面写着:

java.lang.UnsatisfiedLinkError: dlopen failed: cannot find "./obj/local/armeabi-v7a/libsharedlibrary.so" from verneed[1] in DT_NEEDED list for "/data/data/com.my.app/cache/libnative.so"

试了很多,还是不明白。我希望那里的任何人都可以帮助我!提前致谢!

编辑: 它不是 this 的副本问题,因为它不是同一个错误。这个问题的答案对我没有帮助......

最佳答案

libsharedlibrary.so 缺少它的 SONAME 条目。您目前可能会看到类似以下内容:

$ readelf -dW libnative.so | grep NEEDED | grep libsharedlibrary
 0x0000000000000001 (NEEDED)             Shared library: [./obj/local/armeabi-v7a/libsharedlibrary.so]

请注意,如果您的系统上没有 readelf,它在 NDK 中以 $NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-readelf 的形式提供(根据操作系统的需要调整路径)。请注意,这里的架构实际上并不重要。 readelf 是一个多架构工具。任何工具链的 readelf 都可以正常工作。

如果 libsharedlibrary.so 是使用 SONAME 构建的,您应该看到的是:

$ readelf -dW libnative.so | grep NEEDED | grep libsharedlibrary
 0x0000000000000001 (NEEDED)             Shared library: [libsharedlibrary.so]

您应该在 libsharedlibrary.so 上看到以下内容:

$ readelf -dW libsharedlibrary.so | grep SONAME
 0x000000000000000e (SONAME)             Library soname: [libsharedlibrary.so]

问题是 libsharedlibrary.so 不是用 -Wl,-soname,libsharedlibrary.so ldflag 构建的。 ndk-build 和 CMake 会为您做这些,但如果您使用的是独立工具链或自定义构建系统,那么您需要自己提供。

如果库是由第三方构建的,而您无法自己重建它,我认为您无能为力。您需要联系供应商并报告错误,以便他们进行修复。

关于安卓NDK : dlopen failed,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54042024/

相关文章:

android - 如何使用 FileProvider 获取文件列表

android - 如何在 XML 中的实心圆圈内绘制小圆圈/点?

android - 在android中设置WebView缓存的过期时间

java - ${aapt} 如何定义? (没有这样的文件或目录)

android - 如何使用ndk-build构建不同文件夹下的源文件?

Android init.rc 在服务退出时触发

android - 与 setnextanim 崩溃?

android - 如何强制关闭 GetX Snackbar?

android - 使用android ndk编译ffmpeg时如何保持兼容性

android - 无法启动 Android 虚拟 AVD 设备