Pull to refresh

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, который топикастер искал.

Какой "весь"? Nmake это сборщик который вместе с Visual Studio идёт. Тут пёрл и вижла.

А Visual Studio из коробки? Извините за сарказм. Просто amarao, скорее всего, имел ввиду, что в linux ничего предварительно-дополнительно ставить не нужно и вся забота ложиться на пакетный менеджер.

Это только до тех пор пока вас устраивает системная версия 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 - это ведь шутка такая, да?

Конечно, правильней было бы собрать пакет и установить его штатными средствами дистрибутива.

Если измененя минорные - не вижу смысла чего-то переустанавливать. Если изменения серьёзные (1.0 на 1.1 например) - я бы так не делал.

С новой версией будут танцы потоньше. Надо будет притащить новый тарбол и поправить зависимости, если надо. Мой лучший инструмент для этого gbp.

В целом, вопрос с уточнением зависимостей сохраняется в полный рост (кто-то это должен проверить и выписать), но сам процесс сборки будет целиком контролироваться cowdancer'ом (до-докеровая штука для создания окружения с заданными версиями пакетов).

В целом, это довольно сложный путь, но он а) полностью sound и reproducible, б) приводит к результатам, которые можно распространять за пределы своей машины.

А еще можно взять vcpkg и не заморачиваться.

Вот тоже подумал. Столько геморроя, которые решаются vcpkg буквально за 5-10 минут...

Автор буквально сам себе злой буратино. Можно взять vcpkg или conan и не писать статью, а написать лишь одну строчку.

Данная утилита без косяков ставит версию 1.1

При попытке установить 3 версию openssl у многих пользователей и у меня тоже вылетают ошибки.
Если бы долгий путь не оказался единственным из сработавших, я бы не писал статью а черканул бы себе в записной книжке одну строчку.

Для этого сейчас есть пакетные менеджеры.

Конкретно для студии - NuGet - зависимости нужных версий устанавливаются прямо из IDE

Кроссплатформенные (из тех что пробовал) - conan, vcpkg. Довольно легко интегрируются с CMake.

Позволю себе заметить что nuget не предлагает последних версий библиотеки. Последняя предлагаемая 1.1. У меня собрана актуальная со всеми фиксами безопасности

На что только люди не пойдут, чтобы не ставить Linux :-)

Но, если серьёзно, аналогичный код (кое-что поменял когда перепечатывал) у меня скомпилировался такой командой:

g++ -o mytest ssl.cpp -lboost_system -lcrypto -lssl -lpthread

Debian GNU/Linux 11, нужные заголовочные файлы и библиотеки даже оказались установлены (нужны были для чего-то раньше).

На что только люди не пойдут, чтобы не ставить Linux :-)

Через линух - кривой путь. Ещё больше колготы, если линух ещё не установлен.

На следующем шаге возможно познать дзен, так как компилироваться это будет достаточно долго.
А виндовый nmake не поддерживает многопоточную компиляцию? В нормальном make это делается ключем -j N, где N — желаемое число потоков (обычно берется равным числу ядер процессора). Так сборка идет гораздо веселее.

Для этого существует Jom

Не помню но как то добыл опенссл для винды правда без буста, до сих пор не парюсь - лежит в репозитории

UFO just landed and posted this here

Ну может я как то не так написал, но у меня во введении прямым текстом говорится, что это мой домашний проект, а на работе проблема решается тем что сборка производится не на компах разрабов. Для моего личного проекта выбор технологий может быть обоснован личным же интересом. Перестанет быть интересно или я пойму как работает нужная мне штука - сгорит проект в огне, а я продолжу работу работать.

UFO just landed and posted this here

Спасибо за подробное описание. Раз в год приходится пересобирать эти библиотеки. Но вечно вылетает из головы насколько это не простой процесс.

Sign up to leave a comment.

Articles