Android 警告:libcryptopp.so:is缺失DT_SONAME将使用basename作为替换
我正在尝试构建Android 警告:libcryptopp.so:is缺失DT_SONAME将使用basename作为替换,android,android-ndk,crypto++,Android,Android Ndk,Crypto++,我正在尝试构建libcryptopp。因此并将其包含在我的JNI代码中,请遵循中的指南,我遇到了以下问题 Crypto++5.6.3中缺少符号问题 最初我使用Crypto++5.6.3,遇到了以下问题: java.lang.UnsatisfiedLinkError: dlopen failed: cannot locate symbol "_Z9GlobalRNGv" referenced by "/data/app/com.example.administrator.jnitest-2/
libcryptopp。因此
并将其包含在我的JNI代码中,请遵循中的指南,我遇到了以下问题
Crypto++5.6.3中缺少符号问题
最初我使用Crypto++5.6.3,遇到了以下问题:
java.lang.UnsatisfiedLinkError: dlopen failed: cannot locate symbol "_Z9GlobalRNGv"
referenced by "/data/app/com.example.administrator.jnitest-2/lib/arm/libcryptopp.so"...
我检查了libcryptopp.so
:
$ readelf -Ws libcryptopp.so | grep _Z9GlobalRNGv
1406: 00000000 0 NOTYPE GLOBAL DEFAULT UND _Z9GlobalRNGv
15836: 00000000 0 NOTYPE GLOBAL DEFAULT UND _Z9GlobalRNGv
切换到Crypto++5.6.4可以修复此问题,但我仍然不知道原因,并且遇到了另一个问题:
缺少dtu SONAME
12-21 09:50:20.837 21677-21677/com.example.administrator.jnitest
W/linker: /data/app/com.example.administrator.jnitest- 1/lib/arm/libcryptopp.so: is missing DT_SONAME will use basename as a
replacement: "libcryptopp.so"
实际上这只是一个警告,应用程序不会崩溃
我正在使用最新版本的android Mashwallow MOB31K。
有些人在使用其他库时也遇到过类似的问题
https://github.com/bytedeco/javacpp-presets/issues/188
在安卓N-preview上
为什么我会收到警告?如何修复它?经过一些尝试,我发现一个不完美的解决方案 看来安卓N turns现在需要库版本 在构建时启用SONAME标志 默认情况下,Cryptopp关闭版本标志。在GNUmakefile交叉中:
HAS_SOLIB_VERSION ?= 0
将该值设置为1:
HAS_SOLIB_VERSION ?= 1
生成,然后使用生成的.so文件。警告将被取消
问题是is库无法在android 5.0上运行。因此,我们最好现在就不要再提这个警告。分享您的知识是一个很好的想法:)不过,正确的做法是发布一个问题,就像您确实遇到了问题一样,然后回答您自己的问题。如果你像现在这样发布你的帖子,人们永远不会知道你真的给出了答案。谢谢你的贡献@姚明-5.6.3增加了索纳姆。我们注意到人们在iOS和Android上的libs版本有问题,所以我们删除了5.6.4版本的SONAME for mobile targets。邮件列表中有一些关于Android和版本化LIB的问题。另见。@Rightleg,谢谢你的指导,我是新来的。很抱歉,我后来发现这实际上是一个警告,我已经改正了。但希望这仍然有用。@jww感谢您的回答,目前最好的解决方案可能是不使用此警告。@yao-我不记得看到过“libcryptopp.so:is missing DT_SONAME将使用basename…”警告。我也不记得我是否在Mashwallow下测试过。我会留意警告的。也许我们应该添加一条消息,告诉某人如果需要,如何启用版本库。