У меня есть библиотека, написанная на 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
Я хочу использовать эту версию LIBS, потому что мы используем его на Windows, и прошивкой.
Мне удалось собрать эти библиотеки для армейцев с платформой платформы Android-21. Также мне удалось создать источники моей библиотеки. Но когда я связать все вместе, я получил эти ошибки:
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 без пользовательского интерфейса (интерфейс командной строки). Но проблема в том, что libcurl требует OpenSSL UI с этой версией OpenSSL. OpenSSL использует абстракцию пользовательского интерфейса для согласования доступа к закрытым ключам в криптографических двигателях.
Возможно ли построить libcurl для Android с последним OpenSSL? Должен ли я изменить свою инструментальную цепочку?
Почему вы строите Android 8, если вы хотите поддерживать Android 21? –
Ниже приведена моя ошибка: /armeabi/libcurl.a(ui_openssl.o):function read_string_inner: ошибка: неопределенная ссылка на 'bsd_signal' /usr/local/google/buildbot/src/android/ndk-r12-release/ndk/sources/cxx-stl/llvm-libC++/libcxx/include/atomic: 922: ошибка: неопределенная ссылка на '__atomic_fetch_add_4' и т. д. и т. д. Одиночная проблема. Мой скручиватель предварительно построен с Android-9, и поэтому я строю Android-21. Решение, которое вы опубликовали, это правильный способ сделать это? – AdiAtAnd
Кроме того, у меня есть jsoncpp и pugi, созданный с помощью android-21 при создании окончательного .so Мне нужно включить эти 2 .a также. Помогите справиться с этой проблемой. Разработанная Android-8 финальная библиотека не будет полезна в последних версиях Android. Правильно? Тогда в чем его польза? – AdiAtAnd