Android-21 使用 OpenSSL 静态构建 libcurl
Android-21 static build of libcurl with OpenSSL
我有一个用 C++11 编写的库(线程、智能指针)。对于 HTTP 支持,该库使用 libcurl 和 openssl 来支持 HTTPS。在此之前,这个库只能在 Windows 和 iOS 上工作。但是我在 Android.
上接到了 运行 的任务
我们的要求是:
- NDK Android-21 平台(看起来在这个平台上我们得到了正确的 C++11 支持)。
- libcurl 版本 7.44.0
- OpenSSL 库(libcrypto、libssl)版本 1.0.2d
我想使用这个版本的库,因为我们在 Windows 和 iOS.
使用它
我设法使用 Android-21 平台工具链为 armeabi 构建了这些库。我还设法建立了我的图书馆的来源。但是当我 link 在一起时,我得到了这些错误:
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 中没有终端方法,我决定构建没有 UI(命令行界面)的 OpenSSL。但问题是 libcurl 需要使用此 OpenSSL 版本的 OpenSSL UI。 OpenSSL 使用用户界面抽象来协商对加密引擎中私钥的访问。
是否可以使用最新的 OpenSSL 为 android 构建 libcurl?我应该更改我的工具链吗?
Androdi-21 与 libcurl 和 OpenSSL 完美配合,使用 Android-8 构建产生这些错误的最终库。
方法 getpwuid_r
直到 Android 14 才得到完全支持,这就是为什么您在使用 Android 21 构建时看不到错误的原因。请参阅此 commit 实现了 getpwuid_r
。我认为其他未定义的引用是由于类似的问题。
我有一个用 C++11 编写的库(线程、智能指针)。对于 HTTP 支持,该库使用 libcurl 和 openssl 来支持 HTTPS。在此之前,这个库只能在 Windows 和 iOS 上工作。但是我在 Android.
上接到了 运行 的任务我们的要求是:
- NDK Android-21 平台(看起来在这个平台上我们得到了正确的 C++11 支持)。
- libcurl 版本 7.44.0
- OpenSSL 库(libcrypto、libssl)版本 1.0.2d
我想使用这个版本的库,因为我们在 Windows 和 iOS.
使用它我设法使用 Android-21 平台工具链为 armeabi 构建了这些库。我还设法建立了我的图书馆的来源。但是当我 link 在一起时,我得到了这些错误:
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 中没有终端方法,我决定构建没有 UI(命令行界面)的 OpenSSL。但问题是 libcurl 需要使用此 OpenSSL 版本的 OpenSSL UI。 OpenSSL 使用用户界面抽象来协商对加密引擎中私钥的访问。
是否可以使用最新的 OpenSSL 为 android 构建 libcurl?我应该更改我的工具链吗?
Androdi-21 与 libcurl 和 OpenSSL 完美配合,使用 Android-8 构建产生这些错误的最终库。
方法 getpwuid_r
直到 Android 14 才得到完全支持,这就是为什么您在使用 Android 21 构建时看不到错误的原因。请参阅此 commit 实现了 getpwuid_r
。我认为其他未定义的引用是由于类似的问题。