diff --git a/qt/i2pd_qt/docs/patch_openssl_so_libs.html b/qt/i2pd_qt/docs/patch_openssl_so_libs.html
new file mode 100644
index 00000000..0fb7d540
--- /dev/null
+++ b/qt/i2pd_qt/docs/patch_openssl_so_libs.html
@@ -0,0 +1,59 @@
+
+
+Мини-руководство по тому, как быстро скомпилировать OpenSSL для Android и связать его с проектом Qt.
+Для Linux.
+Вначале действия полностью идентичны
"расово-верному" руководству по компилянию OpenSSL для Android:
+Качаем исходники openssl нужной версии с их сайта, качаем setenv-android.sh(все ссылки на закачку выше по ссылке).
+Ложим их в одну папку. Запускаем консоль, переходим в ней в эту самую папку.
+Далее:
BashВыделить код |
1
+2
+3
+ | $ 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 исполняться |
|
Редактируем setenv-android.sh, настраивая там _ANDROID_EABI, _ANDROID_ARCH, _ANDROID_API на нужные значения.
+Дальше возвращаемся в консоль:
BashВыделить код |
1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+ | $ 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 |
|
И тут начинается интересное. Андроид не принимает 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Выделить код |
1
+2
+3
+4
+5
+ | android: {
+ INCLUDEPATH += /usr/local/ssl/android-21/include
+ LIBS += -L/usr/local/ssl/android-21/lib
+}
+LIBS += -lcrypto |
|
А затем в настройках проекта, в Buld/Build Steps/Bulild Android Apk добавить libcrypto_1_0_0.so и libssl_1_0_0.so в список Additional Libraries.
+На этом всё.
+
+
+
Original: http://www.cyberforum.ru/blogs/748276/blog4086.html
+
+
diff --git a/qt/i2pd_qt/i2pd_qt.pro b/qt/i2pd_qt/i2pd_qt.pro
index f247cee4..8adfd140 100644
--- a/qt/i2pd_qt/i2pd_qt.pro
+++ b/qt/i2pd_qt/i2pd_qt.pro
@@ -135,14 +135,23 @@ INCLUDEPATH += /home/anon5/git/Boost-for-Android-Prebuilt/boost_1_53_0/include
/home/anon5/git/OpenSSL-for-Android-Prebuilt/openssl-1.0.2/include \
../../../android-ifaddrs/
equals(ANDROID_TARGET_ARCH, armeabi-v7a){
+# http://stackoverflow.com/a/30235934/529442
LIBS += -L/home/anon5/git/Boost-for-Android-Prebuilt/boost_1_53_0/armeabi-v7a/lib \
- -L/home/anon5/git/OpenSSL-for-Android-Prebuilt/openssl-1.0.2/armeabi-v7a/lib \
--lcrypto \
--lssl \
+#/home/anon5/git/OpenSSL-for-Android-Prebuilt/openssl-1.0.2/armeabi-v7a/lib/libcrypto.a \
+#/home/anon5/git/OpenSSL-for-Android-Prebuilt/openssl-1.0.2/armeabi-v7a/lib/libssl.a \
-lboost_system-gcc-mt-1_53 \
-lboost_date_time-gcc-mt-1_53 \
-lboost_filesystem-gcc-mt-1_53 \
--lboost_program_options-gcc-mt-1_53
+-lboost_program_options-gcc-mt-1_53 \
+-L$$PWD/../../../OpenSSL-for-Android-Prebuilt/openssl-1.0.2/armeabi-v7a/lib/ -lcrypto -lssl
+
+PRE_TARGETDEPS += $$PWD/../../../OpenSSL-for-Android-Prebuilt/openssl-1.0.2/armeabi-v7a/lib/libcrypto.a \
+ $$PWD/../../../OpenSSL-for-Android-Prebuilt/openssl-1.0.2/armeabi-v7a/lib/libssl.a
+
+DEPENDPATH += $$PWD/../../../OpenSSL-for-Android-Prebuilt/openssl-1.0.2/include
+
+ANDROID_EXTRA_LIBS += /home/anon5/git/OpenSSL-for-Android-Prebuilt/openssl-1.0.2/armeabi-v7a/lib/libcrypto_1_0_0.so \
+ /home/anon5/git/OpenSSL-for-Android-Prebuilt/openssl-1.0.2/armeabi-v7a/lib/libssl_1_0_0.so
}
}
@@ -151,3 +160,8 @@ message("Using Linux settings")
LIBS += -lcrypto -lssl -lboost_system -lboost_date_time -lboost_filesystem -lboost_program_options -lpthread
}
+
+unix:!macx:
+
+
+