Android NDK r8的Openssl构建问题

时间:2012-08-08 02:04:19

标签: c++ android-ndk openssl

我正在尝试在我的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**** }

如果有人帮我解决这个问题,我真的很感激吗?

5 个答案:

答案 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)

您很可能遇到与链接相关的问题,请尝试阅读此问题的答案

How to link any library in ndk application

答案 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中有一个错误。