3

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

如果有人帮助我解决这个问题,我将不胜感激?

4

5 回答 5

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

于 2012-09-21T00:47:02.260 回答
2

尝试在您的OpenSSL1.0.1cForAndroid\jni\Application.mk中添加以下行

NDK_TOOLCHAIN_VERSION=4.4.3

我只是通过这样做解决了同样的问题。

于 2012-09-25T07:24:07.907 回答
0

我也面临着与 android ndk r8e 相同的问题。然后我下载了openssl-static-android form git。这就像魅力一样。并且您使用的 openssl 版本已在 android ndk r7e 中成功构建。还有一件事,如果您想将此 .so 文件链接到另一个库文件或制作 .apk,我建议您使用 .a 文件而不是 .so。因为 .so 文件有时会导致链接器问题。如果您打算使用 .a 文件,您可以使用 git 中的 openssl-static-android。它适用于所有版本的ndk。

注意:如果您使用的是 android ndk r8e,建议您检查二进制文件以检查它是否已清理。因为android ndk r8e有一个bug。

于 2013-04-16T01:42:30.160 回答
0

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

如何在 ndk 应用程序中链接任何库

于 2012-08-08T02:07:36.730 回答
0

看起来您还需要链接 zlib(或在 OpenSSL 中禁用 zlib 支持)。您可以使用 -lz 执行此操作(它是 Android 的一部分)

于 2012-08-08T02:38:01.603 回答