警告:libcryptopp.so:缺少 DT_SONAME 将使用基本名称作为替代
warning: libcryptopp.so: is missing DT_SONAME will use basename as a replacement
我正在尝试构建 libcryptopp.so
并将其包含在我的 JNI 代码中,遵循 Android Crypto++ 中的指南,我遇到了以下问题。
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 解决了这个问题,但我仍然不知道原因,遇到另一个问题:
缺失DT_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
在 Android N 预览中。
为什么我会收到警告,我该如何解决?
经过一些尝试,我找到了一个不完美的解决方案。
看来android N转现在需要库版本
在构建时打开 SONAME 标志。
Cryptopp 默认关闭版本标志。在 GNUmakefile-cross 中,:
HAS_SOLIB_VERSION ?= 0
将值设置为 1:
HAS_SOLIB_VERSION ?= 1
构建,然后使用生成的.so文件。警告会消失。
问题是库不能在 android 5.0 上运行。所以我们现在最好不要管这个警告。
我正在尝试构建 libcryptopp.so
并将其包含在我的 JNI 代码中,遵循 Android Crypto++ 中的指南,我遇到了以下问题。
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 解决了这个问题,但我仍然不知道原因,遇到另一个问题:
缺失DT_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
在 Android N 预览中。
为什么我会收到警告,我该如何解决?
经过一些尝试,我找到了一个不完美的解决方案。
看来android N转现在需要库版本
在构建时打开 SONAME 标志。
Cryptopp 默认关闭版本标志。在 GNUmakefile-cross 中,:
HAS_SOLIB_VERSION ?= 0
将值设置为 1:
HAS_SOLIB_VERSION ?= 1
构建,然后使用生成的.so文件。警告会消失。
问题是库不能在 android 5.0 上运行。所以我们现在最好不要管这个警告。