无法dlopen,无法在Android 2.1上加载库,但可以在2.2+上

时间:2011-10-12 00:07:29

标签: android android-ndk

我已经使用NDK编译了一个Android的JNI库,该库静态链接到我使用此项目编译的libcrypto.a,https://github.com/fries/android-external-openssl动态链接libdl.so。

即使NDK平台/ android-x / arch-arm / usr / lib目录对于每个版本的android都有一个libdl.so,当我尝试在Android 2.1上加载我的库时,我收到以下错误:

Trying to load lib /data/data/package.name/lib/libmylibrary.so 0x44e83a28
Unable to dlopen(/data/data/package.name/lib/libmylibrary.so): Cannot load library: reloc_library[1244]:    30 cannot locate 'dladdr'...

然后继续使用UnsatisfiedLinkError崩溃,但在2.2+我的原生库链接上运行完美

对我发生的事情或如何解决问题的任何想法?

1 个答案:

答案 0 :(得分:2)

所以在研究这个问题时我发现虽然libdl存在于所有版本的android中,dladdr()被添加到2.2中的C库中

NDK changes.html的相关行如下:

- C Library changes:

For android-8 (a.k.a. Android 2.2):
   - add DL_info and dladdr().