我有一个奇怪的错误,它说:

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是一个多体系结构工具。任何工具链的自述文件都可以正常工作。

如果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将为您做到这一点,但是如果您使用的是独立工具链或自定义构建系统,则需要自己提供。

关于android - Android NDK:dlopen失败,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54042024/

10-09 01:32
查看更多