Как вы компилируете 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
- EDIT ms\nt.mak и удалите bufferoverflowu.lib из EX_LIBS, если вы получите сообщение об ошибке.
- Запуск: nmake -f ms\nt.mak
- ИЗМЕНИТЬ файл ms\do_win64a и добавить "отлаживать" все строки, кроме "ml64" и двух последних строк
- Запуск: ms\do_win64a
- Повторите шаги 4 и 5
- ИЗМЕНИТЕ файл ms\nt.mak и ADD/Zi в список CFLAG!
- Запуск: 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
Предпосылки:
Убедитесь, что Perl и NASM находятся в переменной среды PATH.
Компиляция x64:
- Откройте командную строку x64 Native Tools
- perl Конфигурировать VC-WIN64A --prefix = e:\projects\bin\OpenSSL\vc-win64a --openssldir = e:\projects\bin\OpenSSL\SSL
- NMAKE
- тест nmake
- nmake install
Шаг 4 является необязательным.
Компиляция x86:
- Откройте командную строку x86 Native Tools
- perl Конфигурирование VC-WIN32 --prefix = e:\projects\bin\OpenSSL\vc-win32 --openssldir = e:\projects\bin\OpenSSL\SSL
- NMAKE
- тест nmake
- 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/