2016-03-18 2 views
1

У меня есть библиотека, написанная на C++ 11 (потоки, интеллектуальные указатели). Для поддержки HTTP эта библиотека использует libcurl с openssl для поддержки HTTPS. До этого lib должен был работать только в Windows и iOS. Но у меня есть задача запустить его на Android.Android-21 статическая сборка libcurl с OpenSSL

Наши требования в следующем:

  1. NDK Android-21 платформа (выглядит как на этой платформе, мы получаем поддержку Правильные C++ 11).
  2. Libcurl версия 7.44.0
  3. 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? Должен ли я изменить свою инструментальную цепочку?

ответ

1

Метод getpwuid_r не был полностью поддержан до Android 14, поэтому вы не видите ошибки при создании с Android 21. См. Это commit, который реализует getpwuid_r. Я думаю, что другие неопределенные ссылки связаны с аналогичной проблемой.

1

Androdi-21 отлично работает с libcurl и OpenSSL, используется Android-8 для создания окончательной библиотеки, которая производит эти ошибки.

+0

Почему вы строите Android 8, если вы хотите поддерживать Android 21? –

+0

Ниже приведена моя ошибка: /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

+0

Кроме того, у меня есть jsoncpp и pugi, созданный с помощью android-21 при создании окончательного .so Мне нужно включить эти 2 .a также. Помогите справиться с этой проблемой. Разработанная Android-8 финальная библиотека не будет полезна в последних версиях Android. Правильно? Тогда в чем его польза? – AdiAtAnd

Смежные вопросы