我能够按照这个问题中的指示为 Android 构建 openssl 的共享库。
例如
cd openssl-fips-2.0/
./config
make
make install
和
cd openssl-1.0.1c/
./config fips --with-fipsdir=/usr/local/ssl/fips-2.0/ shared
make depend
make
这将生成 libcrypto.so.1.0.0 和 libssl.so.1.0.0,并带有对应的符号链接作为 libcrypto.so 和 libssl.so。
由于 NDK 构建系统不支持版本化共享库,我不得不使用符号链接(使用 PREBUILT_SHARED_LIBRARY)。但是,有了这个,库最终以 libcrypto.so 和 libssl.so 而不是 libcrypto.so.1.0.0 和 libssl.so.1.0.0 的形式进入设备,导致我的库无法加载,因为它正在寻找对于具有版本名称的库。
链接的问题提到使用 System.load(libcrypto.so.1.0.0) 而不是使用 System.loadLibrary() 加载库,但即使使用完整路径,我也无法让它工作,因为如前所述,文件以 libcrypto.so 的形式复制到设备。
有人成功做到这一点吗?
注意:我还尝试修改 openssl-1.0.1c 配置和 makefile 以生成 libcrypto.1.0.0.so(例如,文件名和 soname 中的扩展名之前的版本号),这让我可以绕过以前加载问题。但是,当我尝试使用 FIPS_module_mode_set (FIPS_R_FINGERPRINT_DOES_NOT_MATCH) 打开 FIPS 模式时出现错误。
我还不知道为什么会这样,但这可能是由于 NDK 剥离了“不需要”的东西(见这个问题)......我还在看这个,但如果有人有一些关于这个的信息非常感谢。