Форум программистов, компьютерный форум, киберфорум
Наши страницы
Wyn
Войти
Регистрация
Восстановить пароль
Оценить эту запись

OpenSSL под Android в Qt

Запись от Wyn размещена 18.01.2016 в 18:22
Метки android, openssl, qt

Мини-руководство по тому, как быстро скомпилировать OpenSSL для Android и связать его с проектом Qt.
Для Linux.

Вначале действия полностью идентичны [URL="https://wiki.openssl.org/index.php/Android"]"расово-верному" руководству по компилянию OpenSSL для Android[/URL]:
Качаем исходники openssl нужной версии с их сайта, качаем setenv-android.sh(все ссылки на закачку выше по ссылке).
Ложим их в одну папку. Запускаем консоль, переходим в ней в эту самую папку.
Далее:
[BASH]$ rm -rf openssl-1.0.1g/ # удаляем исходники(вместо версии 1.0.1g - подставляем свою), если они уже были распакованы
$ tar xzf openssl-1.0.1g.tar.gz # распаковываем исходники в подпапку
$ chmod a+x setenv-android.sh # разрешаем setenv-android.sh исполняться[/BASH]
Редактируем setenv-android.sh, настраивая там _ANDROID_EABI, _ANDROID_ARCH, _ANDROID_API на нужные значения.
Дальше возвращаемся в консоль:
[BASH]$ export ANDROID_NDK_ROOT=путь_до_ANDROID_NDK # указываем путь до Android NDK для setenv-android.sh
$ . ./setenv-android.sh # запускаем скрипт, чтобы он нам в окружение проставил необходимые далее переменные
$ cd openssl-1.0.1g/
$ perl -pi -e 's/install: all install_docs install_sw/install: install_docs install_sw/g' Makefile.org
# конфигурируем
$ ./config shared no-ssl2 no-ssl3 no-comp no-hw no-engine --openssldir=/usr/local/ssl/$ANDROID_API
# собираем
$ make depend
$ make all
# устанавливаем
$ sudo -E make install CC=$ANDROID_TOOLCHAIN/arm-linux-androideabi-gcc RANLIB=$ANDROID_TOOLCHAIN/arm-linux-androideabi-ranlib
[/BASH]

И тут начинается интересное. Андроид не принимает versioned shared object (это *.so.x и подобные). Казалось бы 2016 год, космические корабли уже давно бороздят просторы Большого театра, но вот те на.

Однако, есть обходной приём - нужно заменить *.so.x.x.x на *_x_x_x.so. Простым переименованием файлов данную проблему здесь, разумеется, не решить. Нужно лезть внутрь и переименовывать soname и внутренние ссылки на другие versioned shared object. В интернете есть много способов по подобному переименованию. Большинство из них обещают райскую жизнь с rpl, забывая упомянуть, что утилита уже давно отпета и закопана на большинстве дистрибутивов. Или хитро-хитро редактируют makefile, что в итоге на место левой руки собирается правая нога. В целом множество путей из разряда "как потратить много времени на полную фигню".

В итоге предлагаю решить данную проблему методом топора:
Качаем hex-редактор, если ещё нет(в моём случае таковым оказался Okteta). Запускаем его из под рута(kdesu okteta), открываем в нём файлы openssldir/lib/libcrypto.so.1.0.0. Заменяем(ctrl+r) в нём символы ".so.1.0.0" на char "_1_0_0.so". Проделываем тоже самое с libssl.so.1.0.0. Всё, теперь осталось только переименовать сами файлы(в libcrypto_1_0_0.so и libssl_1_0_0.so) и поправить ссылки libssl.so и libcrypto.so, чтобы они вели на них.

Чтобы подключить и использовать данную библиотеку в проекте нужно добавить в .pro:
[BASH]android: {
INCLUDEPATH += /usr/local/ssl/android-21/include
LIBS += -L/usr/local/ssl/android-21/lib
}
LIBS += -lcrypto[/BASH]
А затем в настройках проекта, в Buld/Build Steps/Bulild Android Apk добавить libcrypto_1_0_0.so и libssl_1_0_0.so в список Additional Libraries.

На этом всё.
Размещено в Без категории
Просмотров 1474 Комментарии 1
Всего комментариев 1
Комментарии
  1. Старый комментарий
    Как под Винду такое провернуть?
    Запись от GregoryE размещена 19.03.2018 в 01:05 GregoryE вне форума
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru