Как вы компилируете OpenSSL для x64?

После выполнения инструкций в INSTALL.W64 у меня есть две проблемы:

  • Код все еще записывается в папку "out32". Мне нужно иметь возможность ссылаться на 32-битную и 64-разрядную версии библиотеки на моей рабочей станции, поэтому я не хочу, чтобы 64-разрядные версии сбивали 32-битные библиотеки.
  • Выход еще 32-бит! Это означает, что я получаю ошибки "неразрешенных внешних символов" при попытке ссылки на библиотеки из приложения x64.

Ответы

Ответ 1

Для компиляции статических библиотек (как для выпуска, так и для отладки), это то, что вам нужно сделать:

  • Установить Perl - www.activestate.com
  • Запустите "Visual Studio 2008 x64 Command Tools" (Примечание: регулярная командная строка НЕ ​​РАБОТАЕТ.)
  • Настроить с помощью perl Конфигурирование VC-WIN64A без обмена информацией
  • Запуск: ms\do_win64a
  • ИЗМЕНИТЬ ms\nt.mak и измените "32" на "64" в выходных каталогах:
    # The output directory for everything intersting
    OUT_D=out64.dbg
    # The output directory for all the temporary muck
    TMP_D=tmp64.dbg
    # The output directory for the header files
    INC_D=inc64
    INCO_D=inc64\openssl
  1. EDIT ms\nt.mak и удалите bufferoverflowu.lib из EX_LIBS, если вы получите сообщение об ошибке.
  2. Запуск: nmake -f ms\nt.mak
  3. ИЗМЕНИТЬ файл ms\do_win64a и добавить "отлаживать" все строки, кроме "ml64" и двух последних строк
  4. Запуск: ms\do_win64a
  5. Повторите шаги 4 и 5
  6. ИЗМЕНИТЕ файл ms\nt.mak и ADD/Zi в список CFLAG!
  7. Запуск: nmake -f ms\nt.mak

Ответ 2

Я решил проблему таким образом, используя источник 1.0.1c:

Добавьте этот блок в util/pl/VC-32.pl непосредственно перед строкой $o='\\';.

if ($debug)
    {
    $ssl .= 'd';
    $crypto .= 'd';
    }

Добавьте этот блок в util/pl/VC-32.pl непосредственно перед строкой if ($debug).

if ($FLAVOR =~ /WIN64/)
    {
    $out_def =~ s/32/64/;
    $tmp_def =~ s/32/64/;
    $inc_def =~ s/32/64/;
    }

Затем построим все многообразия:

setenv /x86 /release
perl Configure VC-WIN32  --prefix=build -DUNICODE -D_UNICODE
ms\do_ms
nmake -f ms\ntdll.mak

setenv /x64 /release
perl Configure VC-WIN64A --prefix=build
ms\do_win64a.bat
nmake -f ms\ntdll.mak

setenv /x86 /debug
perl Configure debug-VC-WIN32  --prefix=build -DUNICODE -D_UNICODE
ms\do_ms
move /y ms\libeay32.def ms\libeay32d.def
move /y ms\ssleay32.def ms\ssleay32d.def
nmake -f ms\ntdll.mak

setenv /x64 /debug
perl Configure debug-VC-WIN64A --prefix=build
ms\do_win64a.bat
move /y ms\libeay32.def ms\libeay32d.def
move /y ms\ssleay32.def ms\ssleay32d.def
nmake -f ms\ntdll.mak

Ответ 3

Используйте Conan. Его очень просто установить и использовать.

Вы можете запросить файлы, готовые к использованию. Например, для Linux x64 или использования с Visual Studio 2012. Здесь пример инструкции:

conan install OpenSSL/[email protected]/stable -s arch="x86_64" -s build_type="Debug" -s compiler="gcc" -s compiler.version="5.3" -s os="Linux" -o 386="False" -o no_asm="False" -o no_rsa="False" -o no_cast="False" -o no_hmac="False" -o no_sse2="False" -o no_zlib="False" ...

Ответ 4

Согласно официальной документации:

"Вы можете быть удивлены: 64-битные артефакты действительно выводятся в подкаталогах out32 * и имеют имена, заканчивающиеся на * 32.dll. Факт - это цель 64-битного компиляции, которая до сих пор является постепенным изменением по сравнению с предыдущим 32-битным целевым окном Windows Множество флагов компиляции по-прежнему помечены как" 32 ", хотя они применимы как к 32, так и к 64-битным целям".

Итак, первый ответ больше не нужен.

Инструкции можно найти здесь:

https://wiki.openssl.org/index.php/Compilation_and_Installation#W64

Ответ 5

Если вы создаете в cygwin, вы можете использовать следующий script, предположим, что MSDEVPATH уже установлен в ваш каталог Visual Studio

 echo "Building x64 OpenSSL"
 # save the path of the x86 msdev
 MSDEVPATH_x86=$MSDEVPATH
 # and set a new var with x64 one
 MSDEVPATH_x64=`cygpath -u $MSDEVPATH/bin/x86_amd64`

 # now set vars with the several lib path for x64 in windows mode
 LIBPATH_AMD64=`cygpath -w $MSDEVPATH_x86/lib/amd64`
 LIBPATH_PLATFORM_x64=`cygpath -w $MSDEVPATH_x86/PlatformSDK/lib/x64`
 # and set the LIB env var that link looks at
 export LIB="$LIBPATH_AMD64;$LIBPATH_PLATFORM_x64"

 # the new path for nmake to look for cl, x64 at the start to override any other msdev that was set previously
 export PATH=$MSDEVPATH_x64:$PATH

 ./Configure VC-WIN64A zlib-dynamic --prefix=$OUT --with-zlib-include=zlib-$ZLIB_VERSION/include --with-zlib-lib=zlib-$ZLIB_VERSION/x64_lib

 # do the deed
 ms/do_win64a.bat
 $MSDEVPATH_x86/bin/nmake -f ms/ntdll.mak  ${1:-install}

Ответ 6

Инструкции по сборке изменились с тех пор, как этот вопрос был первоначально задан. Новые инструкции можно найти здесь. Обратите внимание, что вам нужно будет установить perl и NASM, и вам нужно будет использовать командную строку разработчика.

Ответ 7

На момент написания этой версии самой последней версии OpenSSL была 1.1.1a.

Среда:

  • Windows 10
  • MS Visual Studio 2017

Предпосылки:

  • Установить ActivePerl - версия сообщества отлично
  • Установка NASM

Убедитесь, что Perl и NASM находятся в переменной среды PATH.

Компиляция x64:

  1. Откройте командную строку x64 Native Tools
  2. perl Конфигурировать VC-WIN64A --prefix = e:\projects\bin\OpenSSL\vc-win64a --openssldir = e:\projects\bin\OpenSSL\SSL
  3. NMAKE
  4. тест nmake
  5. nmake install

Шаг 4 является необязательным.

Компиляция x86:

  1. Откройте командную строку x86 Native Tools
  2. perl Конфигурирование VC-WIN32 --prefix = e:\projects\bin\OpenSSL\vc-win32 --openssldir = e:\projects\bin\OpenSSL\SSL
  3. NMAKE
  4. тест nmake
  5. nmake install

Шаг 4 является необязательным.

Ответ 8

Вы также можете использовать MSYS + mingw-w64:

1) загрузите и извлеките msys в C:\msys
2) загрузить и извлечь mingw-w64 в c:\mingw64
3) запустите msys postinstall script. Когда он запрашивает вашу установку mingw, укажите ее на C:\mingw64\bin
4) Извлечение дневного снимка openssl (выпуск 1.0.0 содержит ошибку). В исходном каталоге настроить mingw64
сделать
сделать проверку
сделать установку
5) openssl устанавливается в/local/