Android NDK UnsatisfiedLinkError: "dlopen failed: empty/missing DT_HASH"
The library you are trying to load was most likely built with -Wl,--hash-style=gnu
. This was not supported on Android until recently (afaik this isn't even in L). You need to build your libraries with -Wl,--hash-style=sysv
.
How did you build cpplibrary.so
? If you didn't do anything to manually switch to the gnu hash style, it could be a bug in the NDK.
If you're a third party building .so libraries for others to use, setting -Wl,--hash-style=both
seems like the best idea. That gets you the faster loading of the Gnu-style hash and the backwards compatibility of the SysV hash.
If you're only supporting Android 8 and later, there's no need to support the SysV hash.