我正在尝试在我的NDK应用程序中构建Openssl。即使在遵循Android ndk build所期望的所有必要步骤之后,我也经常会出现链接错误。我正在使用ndk-build命令和ndk支持的库。我可以看到libcrypto.So bieng编译并成功链接
Compile thumb : crypto <= sha512-armv4.S
SharedLibrary : libcrypto.so
Install : libcrypto.so => /Users/<me>/Downloads/paddybyers-openssl-android-2b40b8b/libs/armeabi/libcrypto.so
但 openssl 在此之后因某种原因失败而开始。我尝试了所有可能的方法,包括在eclipse和命令行上构建。我甚至尝试将openssl单独构建为支架独自项目。但它总是停在同一水平。
使用mac OS x NDK r8 Openssl来自:https://github.com/eighthave/openssl-android.git(我尝试在guardproject https://github.com/guardianproject/openssl-android.git上构建)
在创建libcrypto.So
之后开始编译openssl之前抛出错误****Compile thumb : ssl <= ssl_algs.c
Compile thumb : ssl <= bio_ssl.c
Compile thumb : ssl <= ssl_err.c
Compile thumb : ssl <= kssl.c
SharedLibrary : libssl.so
Executable : openssl
/Users/me/Documents/android/android-ndk/toolchains/arm-linux-androideabi-4.6/prebuilt/darwin-x86/bin/../lib/gcc/arm-linux-androideabi/4.6.x-google/../../../../arm-linux-androideabi/bin/ld: warning: libz.so, needed by ./obj/local/armeabi/libcrypto.so, not found (try using -rpath or -rpath-link)
./obj/local/armeabi/libcrypto.so: undefined reference to `zError'
./obj/local/armeabi/libcrypto.so: undefined reference to `inflateEnd'
./obj/local/armeabi/libcrypto.so: undefined reference to `deflate'
./obj/local/armeabi/libcrypto.so: undefined reference to `deflateInit_'
./obj/local/armeabi/libcrypto.so: undefined reference to `inflate'
./obj/local/armeabi/libcrypto.so: undefined reference to `deflateEnd'
./obj/local/armeabi/libcrypto.so: undefined reference to `inflateInit_'
collect2: ld returned 1 exit status
make: *** [obj/local/armeabi/openssl] Error 1**** }
如果有人帮我解决这个问题,我真的很感激吗?
答案 0 :(得分:4)
我遇到了同样的问题并通过修改OpenSSL1.0.1cForAndroid / crypto / Android.mk修复了它,并将libzib添加到导出列表中:
crypto/Android.mk
LOCAL_EXPORT_LDLIBS := -lz
Crypto / Android.mk确实有“LOCAL_LDLIBS + = -lz”,因此它在构建libcrypto时成功链接它,但显然在ssl(?)中链接时传播它是不够的。
我正在使用ndk r8b,gcc 4.6
答案 1 :(得分:2)
尝试在 OpenSSL1.0.1cForAndroid \ jni \ Application.mk
中添加以下行NDK_TOOLCHAIN_VERSION=4.4.3
我刚刚解决了同样的问题。
答案 2 :(得分:0)
您很可能遇到与链接相关的问题,请尝试阅读此问题的答案
答案 3 :(得分:0)
看起来你也需要链接zlib(或者在OpenSSL中禁用zlib支持)。你可以用-lz(它是Android的一部分)
来做到这一点答案 4 :(得分:0)
我也遇到了与android ndk r8e相同的问题。然后我下载了openssl-static-android表格git。这就像魅力一样。你正在使用的openssl版本在android ndk r7e中成功构建。还有一件事,如果你想将这个.so文件链接到另一个库文件或制作.apk,我建议你使用.a文件而不是.so文件。因为.so文件有时会导致链接器问题。如果您打算使用.a文件,可以使用git中的openssl-static-android。它适用于所有版本的ndk。
N.B:如果您使用的是android ndk r8e,我建议您检查二进制文件以检查它是否已清除。因为android ndk r8e中有一个错误。