我尝试构建64位(arm64) OpenSSLV1.1b,并将其作为共享库(libcrypto.so和libssl.so)添加到我的应用程序中。我用--arch arm64和-api 21参数构建了独立的工具链,然后用它构建了openssl库并将它们添加到我的应用程序中。所有带有Android6.x和更高版本的64位设备都工作得很好,但我被困在了Android5.0.1 64位-联想TAB 2 A10-70L平板电脑上。
问题是,在这个特定的Android上,当我加载libssl.so时,我会得到错误:
E/art ( 2755): dlopen("/data/app/com.myapp.mypackage-1/lib/arm64/libssl.so", RTLD_LAZY) failed:
dlopen failed: cannot locate symbol "EVP_camellia_128_cbc" referenced by "/data/app/com.myapp.mypackage-1/lib/arm64/libssl.so"...
E/MY_APP( 2755): 2019-06-12 14:22:27,984: [MY_APP][18446744071776944368] ERROR (2117) - Error in loading libraries :
dlopen failed: cannot locate symbol "EVP_camellia_128_cbc" referenced by "/data/app/com.myapp.mypackage-1/lib/arm64/libssl.so"...因此,在启动屏幕期间或之后不执行->和应用程序崩溃之后,将抛出异常,加载其他库。
我在StackOverflow上发现,如果您根据较高的android版本编译本机库(作为openssl),那么所使用的平板电脑就是…。但是我用api 21来制作openssl,这是Android5.0,所以应该没有问题。看起来,openssl期望设备库中有这个符号,而这个设备没有这个符号。
我试过的是:
为什么会发生这种情况,我如何才能在Android5.x64位上运行我的应用程序呢?
发布于 2020-01-30 16:14:14
自我解决方案:)经过我前面提到的尝试,我找到了唯一可行的解决方案--将openssl构建为静态库(所以是libssl.a和libcryp.a),并将这些文件添加到app中。
看起来,动态openssl库(*.so)并不适用于我的应用程序,它使用的是较老的NDK,但老实说,我仍然不知道为什么。
https://stackoverflow.com/questions/56565552
复制相似问题