31 мая, 2017

Сборка OpenSSL 1.0.2l с помощью VC++ 2015 (XP Toolchain)

Сборка OpenSSL 1.0.2l с помощью VC++ 2015 (XP Toolchain) для статической сборки

Эта сборка была проделана для компиляции Qt 5.8, и вообщем-то получилось.

  • Установить интерпретатор Perl, например  ActiveState Perl, который во время установки добавит себя в PATH самостоятельно. И больше ничего не нужно;
  • Установить nasm. Подойдет и 64-битная версия. Нужно добавить его в PATH (например утилитой Rapid Environment Editor). Можно и без этого пункта, просто далее использовать параметр командной строки no-asm для конфигуратора;
  • Скачать из репозитория OpenSSL нужную 1.0.x версию. В примере я использую 1.0.2l;
  • Распаковать архив и далее внутри папки запускать команды или создать cmd файл и запустить его (смотри ниже);
  • Стоит изучить файлы из архива INSTALL, INSTALL.W32 и INSTALL.W64;

Правка файлов OpenSSL

Для поддержки XP нужно подредактировать файл \util\pl\VC-32.pl:

  • Найти if ($FLAVOR =~ /WIN64/) ... $lflags="/nologo /subsystem:console /opt:ref" и изменить /subsystem:console на /subsystem:console,5.02
  • Найти else # Win32 ... $lflags="/nologo /subsystem:console /opt:ref" и изменить /subsystem:console на /subsystem:console,5.01

Настройка VC++2015

Перед сборкой нужно настроить окружение компилятора.

Настройка VC++ x32:

:: INIT XP x32 TOOLCHAIN
set SDK71PATH=%ProgramFiles%\Microsoft SDKs\Windows\7.1A
path %SDK71PATH%\Bin;%PATH%
set INCLUDE=%INCLUDE%;%SDK71PATH%\Include
set LIB=%LIB%;%SDK71PATH%\Lib

:: INIT VC++2015 x32
:: Если вы используете VС++2015 Build Tools, но VS2015 не установлен,
:: возможно вам нужно будет применить файл VS140COMNTOOLS_in_VS2017_fix.reg
:: https://gist.github.com/Ruzzz/38dc70f4b850dd5e379f8cfa2cbf09a3
call "%VS140COMNTOOLS%\..\..\VC\bin\vcvars32.bat"

Настройка VC++ x64:

:: INIT XP x64 TOOLCHAIN
set SDK71PATH=%ProgramFiles%\Microsoft SDKs\Windows\7.1A
path %SDK71PATH%\Bin\x64;%PATH%
set INCLUDE=%INCLUDE%;%SDK71PATH%\Include
set LIB=%LIB%;%SDK71PATH%\Lib\x64

:: INIT VC++2015 x64
:: VS140COMNTOOLS_in_VS2017_fix.reg
:: https://gist.github.com/Ruzzz/38dc70f4b850dd5e379f8cfa2cbf09a3
call "%VS140COMNTOOLS%\..\..\VC\bin\amd64\vcvars64.bat"

Кратко команды сборки

Сборка состоит из настройки и самой сборки. Вначале кратко команды, а далее описание. Для x32 версии:

perl Configure VC-WIN32 no-shared threads ^
    --prefix=C:\Dev\OpenSSL_102l_vs2015_32_xp ^
    --openssldir=C:\Dev\OpenSSL_Config_102l ^
    -D_USING_V110_SDK71_
call ms\do_ms
call ms\do_nasm
nmake -f ms\nt.mak clean
nmake -f ms\nt.mak
nmake -f ms\nt.mak install

Для x64 версии:

perl Configure VC-WIN64A no-shared threads ^
    --prefix=C:\Dev\OpenSSL_102l_vs2015_64_xp ^
    --openssldir=C:\Dev\OpenSSL_Config_102l ^
    -D_USING_V110_SDK71_
call ms\do_win64a
nmake -f ms\nt.mak clean
nmake -f ms\nt.mak
nmake -f ms\nt.mak install

Конфигурация сборки

  • Конфигурация производиться с помощью Perl скрипта Configure;
  • Основные параметры для выбора платформы x32/x64: VC-WIN32|VC-WIN64A;
  • Дополнительные параметры смотреть в документации, далее некоторые из них;
  • --prefix= - задает путь куда будут установлены файлы (bin, include, lib);
  • --openssldir= - задает путь куда будут скопированы файлы настроек и сертификат. Она может быть одной и той же для x32 и x64 версий.
  • no-asm - не использовать asm и соответственно не нужно вызывать call ms\do_nasm. Иногда может понадобиться, если есть проблемы при сборке;
  • no-shared - собирать только библиотеки для статической сборки (не для dll);
  • -D_USING_V110_SDK71_ - Только если нужна поддержка XP;
  • Если вы точно знаете зачем вам нужна библиотека OpenSSL, то можно отключить некоторые ненужные вам алгоритмы.

Сборка

  • Файлы для сборки x32 версии ms\do_ms и ms\do_nasm по документации альтернатива один другому. Последний используется для компиляции asm версии, иначе другой. Но у меня при сборке asm-версии была ошибка .\engines\e_capi.c(150) : error C2143, от которой получилось избавиться добавив в начале команду call ms\do_ms;
  • Команда nmake -f ms\nt.mak clean вообщем не нужна, но удобна при экспериментах и множественной пере-сборке;
  • Команда nmake -f ms\nt.mak - компилирует файлы;
  • Команда nmake -f ms\nt.mak install - "красиво" устанавливает файлы в указанную папку;
  • Можно также создать сборки: не используя XP Toolchain, или с другим компилятором. Достаточно подкорректировать наш cmd-файл для автоматизации сборки. Примеры команд для использования разных версий VC++ из командной строки;

Полные версии файлов, для которых нужно скачать и настроить perl, nasm, исходники openssl, далее просто запустить:

После сборки

  • После сборки и установки x64 версии можно переименовать файлы (если вы знаете как указать путь к этим lib-файлам в проектах, то такое переименование не создаст проблем):
    • bin\openssl.exe в bin\openssl64.exe
    • lib\libeay32.lib в lib\libeay64.lib
    • lib\ssleay32.lib в lib\ssleay64.lib
  • После сборки и установки файл include\openssl\opensslconf.h для версий x32 и x64 отличается, так что объединить не получиться;
  • После сборки и установки папка с исходниками больше не нужна, можно сделать архив сборки для последующего использования;
  • ОСТОРОЖНО: Возможна ситуация когда в lib-файлах будут ссылки на другие lib (например из WinSDK или VC++ библиотеки), но сами эти lib не будут включены в файлы OpenSSL. Тогда при сборке проекта вам нужно будет указать такие lib-файлы дополнительно. Линковщик вам об этом сообщит возможно не в самый подходящий момент. Например для сборки Qt 5.8 мне пришлось указывать для OpenSSL список lib файлов как -llibeay32 -lssleay32 -lgdi32 -luser32 из-за ошибки libeay32.lib(rand_win.obj) : error LNK2019: unresolved external symbol.

Скачать

Скачать готовые сборки OpenSSL

Комментариев нет:

Отправка комментария