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下测试过。我会留意警告的。也许我们应该添加一条消息,告诉某人如果需要,如何启用版本库。