Я следовал инструкциям в Руководстве пользователя 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.
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