Android ndk 运行时 - 找不到符号 OPENSSL_init_ssl

Android ndk runtime - cannot locate symbol OPENSSL_init_ssl

我交叉编译了 openssl 1.1.1g 并交叉编译了 libcurl,包括 openssl。 交叉编译顺利通过,libcurl 上没有任何链接器错误。

然后我将这两个 openssl 和 libcurl 包含到我的应用程序中,再次没有链接错误。但是运行时显示:

D/dalvikvm( 4018): Trying to load lib /data/app-lib/com.app-1/libnative-lib-logger.so 0x419cbc60
E/dalvikvm( 4018): dlopen("/data/app-lib/com.app-1/libnative-lib-logger.so") failed: dlopen failed: could not load library "libcurl.so" needed by "libnative-lib-logger.so"; caused by cannot locate symbol "OPENSSL_init_ssl" referenced by "libcurl.so"...

更新:

库 libnative-lib-logger.so 通过 System.loadlibrary

加载

CMakeFiles 编译 native-lib-logger 并链接库 libcrypto、libssl、libcurl、libz、...

这一切都在 openssl 1.0.2 中工作,但使用 1.1.1g 我遇到了这个错误。

还原为旧库(openssl、curl):

D/dalvikvm( 4526): Trying to load lib /data/app-lib/com.app-1/libnative-lib-logger.so 0x419c1010
D/dalvikvm( 4526): Added shared lib /data/app-lib/com.app-1/libnative-lib-logger.so 0x419c1010

openssl 构建:https://pastebin.com/tnNfvw7z 构建 libcurl:https://pastebin.com/wQ5md83f

对于 pastebin 很抱歉,但脚本并不小。

我不知道该找什么了:S 我们将非常感谢所有帮助!

混合 openssl 版本不太可能起作用。在你的情况下,你正在加载针对 openssl 1.1.1 headers 构建的 libcurl,但旧的 libssl 要么已经加载,要么在运行时加载。 请记住,它是平面符号名称空间,拥有两个具有相同符号名称的库充其量会崩溃,或者在最坏的情况下使用您的加密货币做一些令人难以置信的令人讨厌的事情,这是非常不希望的结果。