首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android : dlopen失败

Android : dlopen失败
EN

Stack Overflow用户
提问于 2017-11-14 07:18:49
回答 1查看 4.8K关注 0票数 3

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

代码语言:javascript
复制
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问题的复本,因为它不是相同的错误。这个问题的答案对我没有帮助..。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-01-16 22:45:07

libsharedlibrary.so缺少它的SONAME条目。您目前可能会看到如下所示:

代码语言:javascript
复制
$ 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的形式提供它(根据操作系统的需要调整路径)。请注意,这里的架构实际上并不重要。可读性是一种多拱工具。任何工具链的可读性都会正常工作。

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

代码语言:javascript
复制
$ readelf -dW libnative.so | grep NEEDED | grep libsharedlibrary
 0x0000000000000001 (NEEDED)             Shared library: [libsharedlibrary.so]

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

代码语言:javascript
复制
$ readelf -dW libsharedlibrary.so | grep SONAME
 0x000000000000000e (SONAME)             Library soname: [libsharedlibrary.so]

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

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47279824

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档