Comments 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
Откуда у вас на машине весь этот софт? Кто его поставил? Каких версий? Откуда нужные зависимости нужных версий?
Всюду хвосты неявного происхождения.
(debian/rules для openssl - 152 строки!)
Кстати, тот самый 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 для проекта на С++