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