2012-08-08 117 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中有一個錯誤。