2012-08-08 119 views
2

我想在我的NDK应用程序内部构建Openssl。即使在遵循Android ndk构建所需的所有必要步骤之后,我也会不断得到链接错误。我在ndk支持的库中使用了ndk-build命令。我可以看到libcrypto.So bieng编译并在命令line.I链接成功Android的NDK r8的Openssl构建问题

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后编译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

最有可能你有一个链接相关的问题,请尝试将答案读这一问题

How to link any library in ndk application

+0

Noo我试过编译从官方Android组的独立openssl,正如我所提到的。所以这不太可能是问题所在。但由于 – rana 2012-08-08 05:20:26

0

看起来你需要对抗的zlib以及链接(或OpenSSL的禁用支持zlib)。你可以用-lz做到这一点(的Android它的一部分)

+0

我在哪里可以做到? – rana 2012-08-08 04:55:46

+2

在android make文件中LOCAL_LDLIBS + = -lz – Suman 2012-08-13 09:41:43

4

我遇到同样的问题,并通过修改OpenSSL1.0.1cForAndroid /密码/ Android.mk固定它,加入到libzib导出列表:

crypto/Android.mk 
LOCAL_EXPORT_LDLIBS := -lz 

Crypto/Android.mk确实有“LOCAL_LDLIBS + = -lz”,因此它在构建libcrypto时成功链接它,但显然它不足以在ssl(?)中链接时传播它。

我使用NDK R8B,GCC 4.6

+0

这是正确的修复方法,并且可以与NDK r9一起使用。 – bleater 2013-10-23 03:39:36

2

尝试添加下面的行放在OpenSSL1.0.1cForAndroid \ JNI \ Application.mk

NDK_TOOLCHAIN_VERSION=4.4.3 

我只是固定在同一这样做的问题。

+0

这只是一个解决方法,不能与NDK v9一起使用。 – bleater 2013-10-23 03:39:04

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