Сборка 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.exelib\libeay32.libвlib\libeay64.liblib\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. 
Комментариев нет:
Отправить комментарий