我有一個用C++ 11(線程,智能指針)編寫的庫。對於HTTP支持,該庫使用libcurl和openssl來支持HTTPS。在此之前,lib只能在Windows和iOS上工作。但我有一個任務在Android上運行。Android-21靜態構建libcurl與OpenSSL
我們的要求,是未來:
- NDK的Android-21平臺(貌似這個平臺,我們得到正確的C++ 11的支持上)。
- 的libcurl版本7.44.0
- OpenSSL庫(libcrypto,的libssl)版本1.0.2d
我想用這個版本庫的,因爲我們在Windows和iOS的使用它。
我設法使用Android-21平臺工具鏈爲armeabi構建這些庫。此外,我設法建立我的圖書館的來源。但是,當我聯繫一起我有這些錯誤:
third_party/android/prebuilt/arm\libcurl.a(libcurl_la-curl_ntlm_wb.o): In function `ntlm_wb_init':
curl_ntlm_wb.c:(.text+0x194): undefined reference to `getpwuid_r'
curl_ntlm_wb.c:(.text+0x314): undefined reference to `getpwuid_r'
jni/../../../stsw_third_party/android/prebuilt/arm\libcrypto.a(ui_openssl.o): In function `read_string_inner':
ui_openssl.c:(.text+0x16c): undefined reference to `signal'
ui_openssl.c:(.text+0x294): undefined reference to `tcsetattr'
ui_openssl.c:(.text+0x330): undefined reference to `tcsetattr'
jni/../../../stsw_third_party/android/prebuilt/arm\libcrypto.a(ui_openssl.o): In function `open_console':
ui_openssl.c:(.text+0x5fc): undefined reference to `tcgetattr'
我認爲Android不具有自己的API終端的方法和我決定建立OpenSSL的無UI(命令行界面)。但問題在於,libcurl需要OpenSSL UI以及這個OpenSSL版本。 OpenSSL使用用戶界面抽象來協商訪問密碼學引擎中的私鑰。
是否有可能使用最新的OpenSSL爲android構建libcurl?我應該改變我的工具鏈嗎?
如果您的要求是支持Android 21,爲什麼要用Android 8構建? –
以下是我的錯誤:/armeabi/libcurl.a(ui_openssl.o):function read_string_inner:error:未定義引用'bsd_signal' /usr/local/google/buildbot/src/android/ndk-r12-release/ndk/sources/cxx-stl/llvm-libC++/libcxx/include/atomic:922:錯誤:undefined對'__atomic_fetch_add_4'等的引用等 面對相同的問題。我的捲曲是用Android-9預先構建的,所以我正在用Android-21進行構建。您發佈的解決方案是否是正確的方法? – AdiAtAnd
此外,我有jsoncpp和pugi用android-21構建最終.so我需要包括這些2 .a還有關於這個問題的幫助。 Android-8內置的最終庫不會對最新的Android版本有用..對吧?那它有什麼用處? – AdiAtAnd