Комментарии 29
Как пересобрать SSL под Windows. 15 экранов текста с картинками в посте.
Как пересобрать SSL под Linux (Debian GNU/Linux): sudo apt-get build-dep openssl && apt-get source -b openssl
. На выходе deb'ка для установки.
В процессе сборки оно выглядит страшно... Но ради этого дистрибутивы и существуют. Чтобы один раз человек сделал сложное и невозможное, а остальные пользовались.
Сборка под винду тоже короткая, но требуется как минимум perl
call "C:\Program Files\Microsoft Visual Studio\2022\Preview\VC\Auxiliary\Build\vcvars64.bat"
perl Configure VC-WIN64A no-asm no-shared --prefix=c:\openssl-build-x64
call ms\do_win64a
nmake.exe -f makefile
Это только до тех пор пока вас устраивает системная версия openssl. Но если она вас устраивает — на кой вообще её пересобирать?
./config
make -j8
make test
sudo make install
sudo ldconfig
make clean
Кстати, openssl похоже тот случай, когда кросскомпиляция из Линукса под винду проще, чем нативная компиляция под виндой:
WIN_64_DIR="win64"
ROOT_DIR=$(pwd)
./Configure --prefix=${ROOT_DIR}/${WIN_64_DIR} --cross-compile-prefix=x86_64-w64-mingw32- mingw64
make -j8
make install
make clean
Если не устраивает, то собрать и установить новую версию тоже не проблема:
Обновлять системную либу через make install - это ведь шутка такая, да?
С новой версией будут танцы потоньше. Надо будет притащить новый тарбол и поправить зависимости, если надо. Мой лучший инструмент для этого gbp
.
В целом, вопрос с уточнением зависимостей сохраняется в полный рост (кто-то это должен проверить и выписать), но сам процесс сборки будет целиком контролироваться cowdancer'ом (до-докеровая штука для создания окружения с заданными версиями пакетов).
В целом, это довольно сложный путь, но он а) полностью sound и reproducible, б) приводит к результатам, которые можно распространять за пределы своей машины.
я собираю openssl в VC++ и линкую статически https://github.com/pavel-pimenov/flylinkdc-r6xx/tree/master/openssl
А еще можно взять vcpkg и не заморачиваться.
Вот тоже подумал. Столько геморроя, которые решаются vcpkg буквально за 5-10 минут...
Данная утилита без косяков ставит версию 1.1
При попытке установить 3 версию openssl у многих пользователей и у меня тоже вылетают ошибки.
Если бы долгий путь не оказался единственным из сработавших, я бы не писал статью а черканул бы себе в записной книжке одну строчку.
Для этого сейчас есть пакетные менеджеры.
Конкретно для студии - NuGet - зависимости нужных версий устанавливаются прямо из IDE
Кроссплатформенные (из тех что пробовал) - conan, vcpkg. Довольно легко интегрируются с CMake.
На что только люди не пойдут, чтобы не ставить Linux :-)
Но, если серьёзно, аналогичный код (кое-что поменял когда перепечатывал) у меня скомпилировался такой командой:
g++ -o mytest ssl.cpp -lboost_system -lcrypto -lssl -lpthread
Debian GNU/Linux 11, нужные заголовочные файлы и библиотеки даже оказались установлены (нужны были для чего-то раньше).
На следующем шаге возможно познать дзен, так как компилироваться это будет достаточно долго.А виндовый nmake не поддерживает многопоточную компиляцию? В нормальном make это делается ключем -j N, где N — желаемое число потоков (обычно берется равным числу ядер процессора). Так сборка идет гораздо веселее.
Ну может я как то не так написал, но у меня во введении прямым текстом говорится, что это мой домашний проект, а на работе проблема решается тем что сборка производится не на компах разрабов. Для моего личного проекта выбор технологий может быть обоснован личным же интересом. Перестанет быть интересно или я пойму как работает нужная мне штука - сгорит проект в огне, а я продолжу работу работать.
Спасибо за подробное описание. Раз в год приходится пересобирать эти библиотеки. Но вечно вылетает из головы насколько это не простой процесс.
Установка OpenSSL для проекта на С++