Как скомпилировать OpenSSL в Windows?

Я следовал инструкциям в Руководстве пользователя OpenSSL, которое ссылается на руководство от 3noch по компиляции OpenSSL. Вот инструменты/версии, которые я использую:

  • ActiveState Perl v5.20.2
  • Microsoft Visual Studio 2012
  • Сетевой ассемблер (NASM) v2.12.02
  • OpenSSL 1.0.2j (исходный архив)

Следуя инструкциям, я могу выполнить следующие команды без проблем:

perl Configure VC-WIN32 --prefix=C:\Build-OpenSSL-VC-32
ms\do_ms

Затем, когда я продолжаю выполнять

nmake -f ms\nt.mak

я получаю следующее

 Assembling: tmp32\sha1-586.asm
tmp32\sha1-586.asm(1432) : error A2070:invalid instruction operands
tmp32\sha1-586.asm(1576) : error A2070:invalid instruction operands
NMAKE : fatal error U1077: '"C:\Program Files (x86)\Microsoft Visual Studio 11.0
\VC\BIN\ml.EXE"' : return code '0x1'
Stop.

Изучив эту проблему, я нашел запись в блоге от HostageBrain, в котором упоминается именно эта ошибка, указывающая на использование nasm для компиляции. Итак, я переключился на эту последовательность команд:

perl Configure VC-WIN32 --prefix=C:\Build-OpenSSL-VC-32
ms\do_nasm
nmake -f ms\nt.mak

Однако после перехода на вариант NASM я получаю следующие ошибки:

tmp32\sha1-586.asm:1: error: parser: instruction expected
tmp32\sha1-586.asm:2: error: parser: instruction expected
tmp32\sha1-586.asm:3: error: parser: instruction expected
tmp32\sha1-586.asm:4: warning: label alone on a line without a colon might be in error
tmp32\sha1-586.asm:5: warning: label alone on a line without a colon might be in error
tmp32\sha1-586.asm:6: warning: label alone on a line without a colon might be in error
tmp32\sha1-586.asm:7: error: symbol `IF' redefined
tmp32\sha1-586.asm:7: error: parser: instruction expected
tmp32\sha1-586.asm:8: error: parser: instruction expected
tmp32\sha1-586.asm:9: error: comma expected after operand 1

Я ищу возможность скомпилировать OpenSSL в файлы .lib, на которые я могу ссылаться из других проектов C++, например, при компиляции FreeTDS.


person Alex    schedule 12.10.2016    source источник
comment
Вам необходимо открыть 32-разрядную командную строку разработчика. для Visual Studio. Вам также необходимо убедиться, что NASM находится на пути. Ссылка на ml.exe указывает на то, что используется MASM, а не NASM. Сообщения sha1-586.asm:1: error: parser: instruction expected указывают на проблему с Perl. Я полагаю, что во время настройки запускается сценарий OpenSSL, который исправляет ASM для ассемблера. Можете ли вы попробовать последнюю версию Active Perl (5.24) или Strawberry Perl (5.24)? После изменений нужно Очистить и заново Настроить.   -  person jww    schedule 13.10.2016


Ответы (4)


На той же странице моего блога, на которую вы ссылаетесь, я также описываю случай «без asm» - этот случай проще для компиляции (он вообще не требует nasm), но недостаток в том, что производительность некоторых алгоритмов будет в 2-4 раза медленнее, чем Ассемблерные версии. Если ваш кейс может принять это исполнение - попробуйте скомпилировать кейс 'no-asm'.

perl Configure VC-WIN32 no-asm --prefix=C:\Build-OpenSSL-VC-32
person HostageBrain    schedule 30.01.2017

Я собрал библиотеку из обычной командной строки в Windows 10 с VS 2015 с помощью следующих команд (показана отладочная сборка):

"C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin\amd64\vcvars64.bat"
perl Configure debug-VC-WIN64A --prefix=C:\Path\to\target\folder
ms\do_win64a
nmake -f ms\ntdll.mak
cd out32dll.dbg
..\ms\test
cd ..
nmake -f ms\ntdll.mak install
person wally    schedule 12.10.2016
comment
Следуя этим инструкциям (изменив версию VS на 11, чтобы она соответствовала моей собственной), я смог скомпилировать 64-битную версию, но я все еще не могу скомпилировать 32-битную версию (другие библиотеки, которые мне нужно использовать, являются 32-битными). , и мне нужно, чтобы OpenSSL был 32-битным, чтобы хорошо компилироваться с другими вещами) - person Alex; 12.10.2016
comment
Вы пробовали perl Configure VC-WIN32 no-asm --prefix=c:/some/openssl/dir собрать без asm? - person wally; 13.10.2016

Я знаю, что это старый пост, но для других, у которых есть проблемы с ошибками синтаксического анализа NASM, вот решение:

Как только вы запустите либо ms\do_ms.bat (для использования masm), либо ms\do_nasm.bat (для использования nasm), вы не сможете просто переключиться на другой без предварительной очистки каталога tmp32, иначе Perl никогда не создаст новый файл. .asm файлы корректно. Ошибки синтаксического анализатора, которые вы получаете, связаны с тем, что nasm пытается собрать файл в формате masm.

Самый простой способ очистить tmp32 — запустить «nmake -f ms\nt.mak clean».

person JoeB    schedule 21.07.2017

Отвечая на этот очень старый вопрос. Есть несколько проблем, связанных с его сборкой под x64 таким образом, включая попадание «ассемблеры не найдены», загрузку NASM и добавление в путь и т. Д. Существует очень хорошее и простое решение с использованием MSYS2.

Установите MSYS2. Убедитесь, что у вас есть необходимый набор инструментов (см. руководство по pacman). Затем выполните следующие шаги: $Launch msys2_shell.cmd -mingw64

$wget -c ftp: //ftp.pca.dfn.de/pub/tools/net/openssl/source/openssl-1.0.2o.tar.gz

$tar -xzvf openssl-1.0.2o.tar.gz openssl-1.0.2o/

$cd openssl-1.0.2o/

$./настроить общий mingw64

$ сделать

Вот и все. В каталоге приложений вы получите исполняемый файл openssl вместе с библиотеками.

-Сриджит. Д. Менон

person Sreejith. D. Menon    schedule 23.05.2018
comment
Спасибо за совет. Можете ли вы предложить другие предложения, кроме base-devel для установки пакетов pacman, чтобы это заработало? Я смотрю на компиляцию fips-2.0.14 openssl. Я добавил libcrypt-devel, но все равно не работает: make[1]: gcc: Нет такого файла или каталога make[1]: *** [‹встроенный›: cryptlib.o] Ошибка 127 make[1]: Выход из каталога '/c/users/mitch/openssl-OpenSSL-fips-2_0_14/crypto' make: *** [Makefile:367: build_crypto] Ошибка 1 - person guitarpicva; 11.06.2020
comment
возможно, моя среда MYSY2 просто не завершена. ;) - person guitarpicva; 11.06.2020