Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

warning: libcryptopp.so: is missing DT_SONAME will use basename as a replacement

I am trying to build libcryptopp.so and include it in my JNI code, follow the guide in Android Crypto++, I experienced the following problems.

Missing symbol problems in Crypto++ 5.6.3

Originally I used Crypto++ 5.6.3, I came across this problem:

 java.lang.UnsatisfiedLinkError: dlopen failed: cannot locate symbol "_Z9GlobalRNGv" 

referenced by "/data/app/com.example.administrator.jnitest-2/lib/arm/libcryptopp.so"...

I check the libcryptopp.so:

$ readelf -Ws libcryptopp.so | grep _Z9GlobalRNGv
1406: 00000000     0 NOTYPE  GLOBAL DEFAULT  UND _Z9GlobalRNGv
15836: 00000000     0 NOTYPE  GLOBAL DEFAULT  UND _Z9GlobalRNGv

switching to Crypto++ 5.6.4 fix this problem, but I still do not know the cause and met another problem:

Missing 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"

Actually this is only a warning, app will not crash.

I am using the latest version of android Mashwallow MOB31K. Somebody have also experienced similar problems using other libraries

https://github.com/bytedeco/javacpp-presets/issues/188

on Android N-preview.

Why am I getting the warning, and how do I fix it?

like image 276
yao Avatar asked Oct 29 '22 15:10

yao


1 Answers

After some attempts, I find one imperfect solution.

It appears that android N turns requires library version now.

turn on SONAME flag on build.

Cryptopp turns off the version flag by defaults. In the GNUmakefile-cross,:

HAS_SOLIB_VERSION ?= 0

set the value to 1:

HAS_SOLIB_VERSION ?= 1

build, and then use the generated .so file. the warning will go.

the problem is that is library will not work on android 5.0. So we'd better leave alone this warning now.

like image 106
yao Avatar answered Nov 15 '22 07:11

yao