你如何为 x64 编译 OpenSSL
How do you compile OpenSSL for x64?
按照安装中的说明进行操作后。W64 我有两个问题:
- 代码仍写入"out32"文件夹。我需要能够在工作站上链接到 32 位和 64 位版本的库,所以我不希望 64 位版本破坏 32 位库。
- 输出仍然是32位!这意味着在尝试从 x64 应用程序链接到库时,我收到"未解析的外部符号"错误。
要编译静态库(发布和调试),您需要执行以下操作:
- 安装 Perl - www.activestate.com
- 运行"Visual Studio 2008 x64 Cross Tools 命令提示符"(注意:常规命令提示符将不起作用。
- 配置perl 配置 VC-WIN64A 无共享无想法
- 运行:毫秒\do_win64a
- 编辑 mst.mak 并将输出目录中的"32"更改为"64":
# 所有内容插入的输出目录 OUT_D=out64.dbg # 所有临时渣滓的输出目录 TMP_D=tmp64.dbg # 头文件的输出目录 INC_D=inc64 INCO_D=inc64\openssl
- 编辑 mst.mak 并从EX_LIBS中删除 bufferoverflowu.lib 如果您收到有关它的错误。
- Run: nmake -f mst.mak
- 编辑 ms\do_win64a 文件并将"debug"添加到除"ml64"和最后两行之外的所有行
- 运行:毫秒\do_win64a
- 重复步骤 4 和 5
- 编辑 mst.mak 文件并将/Zi 添加到 CFLAG 列表中!
- Run: nmake -f mst.mak
我使用 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
msdo_ms
nmake -f msntdll.mak
setenv /x64 /release
perl Configure VC-WIN64A --prefix=build
msdo_win64a.bat
nmake -f msntdll.mak
setenv /x86 /debug
perl Configure debug-VC-WIN32 --prefix=build -DUNICODE -D_UNICODE
msdo_ms
move /y mslibeay32.def mslibeay32d.def
move /y msssleay32.def msssleay32d.def
nmake -f msntdll.mak
setenv /x64 /debug
perl Configure debug-VC-WIN64A --prefix=build
msdo_win64a.bat
move /y mslibeay32.def mslibeay32d.def
move /y msssleay32.def msssleay32d.def
nmake -f msntdll.mak
使用柯南。安装和使用非常简单。
您可以请求文件可供使用。例如,对于Linux x64或Visual Studio 2012的使用。下面是一个示例说明:
conan install OpenSSL/1.0.2g@lasote/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" ...
根据官方文档:
"您可能会感到惊讶:64 位工件确实输出在 out32* 子目录中,并且名称以 *32.dll 结尾。事实上,到目前为止,64位编译目标是对传统32位Windows目标的增量更改。许多编译标志仍然标记为"32",尽管这些标志确实适用于 32 位和 64 位目标。
所以第一个答案不再是必需的。
说明可以在这里找到:
https://wiki.openssl.org/index.php/Compilation_and_Installation#W64
在撰写本操作指南时,OpenSSL的最新版本是1.1.1a。
环境:
- 视窗 10
- MS Visual Studio 2017
先决条件:
- 安装 ActivePerl - 社区版很好
- 安装 NASM
确保 Perl 和 NASM 都在 PATH 环境变量中。
编译 x64:
- 打开 x64 本机工具命令提示符
- perl Configure VC-WIN64A --prefix=e:\projects\bin\OpenSSL\vc-win64a --openssldir=e:\projects\bin\OpenSSL\SSL
- 新造
- NMAKE 测试
- nmake 安装
步骤 4 是可选的。
编译 x86:
- 打开 x86 本机工具命令提示符 perl Configure VC-WIN32 --prefix=e:\projects\bin\OpenSSL\
- vc-win32 --openssldir=e:\projects\bin\OpenSSL\SSL
- 新造
- NMAKE 测试
- nmake 安装
步骤 4 是可选的。
如果你在cygwin中构建,你可以使用以下脚本,假设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}
自最初提出此问题以来,构建说明已更改。新说明可在此处找到。请注意,您需要安装 perl 和 NASM,并且需要使用开发人员命令提示符。
你也可以使用 MSYS+mingw-w64:
1) 下载 msys 并将其解压缩到 C:\msys
2) 下载并解压缩 mingw-w64 到 c:\mingw64
3) 运行 MSYS 安装后脚本。当它要求安装您的 mingw 时,请将其指向 C:\mingw64\bin
4) 解压 openssl 每日快照(1.0.0 版本存在错误)。在源目录运行中配置明w64
做
进行检查
进行安装
5) openssl 安装到/local/
- 如何在 Windows x64 上编译支持 fips 的 openssl?
- 静态编译的Qt 5.13.1与OpenSSL 1.1.1d生成QSslSocket::connectToHostEncr
- 带有 openssl 编译的 Lib curl 失败
- Findopenssl.cmake 无法找到 OpenSSL,编译 restbed,C++
- Boost 1_65_1 不能使用 OpenSSL 1.1.0g "undefined reference" 编译,但可以使用 "nm"
- 试图编译Boost和openSSL时(使用WebSocket 或CPPRESTSDK)进行编译错误
- 使用自行编译的OpenSSL在fedora 21上编译比特币
- OpenSSL编译在x86上失败,认为x86_64是成功的
- OpenSSL使用Cmake从源代码进行编译
- 使用OpenSSL(Windows)的Qt中出现编译错误LNK2019
- 在Android上编译OpenSSL
- Curl-openssl编译会产生大量链接器错误
- 编译支持 OpenSSL 的 Windows Phone 8.1 Qt 5.5 时出现问题
- 在Windows中使用Dynamic Zlib编译OpenSSL
- 编译带有 openSSL 错误的静态 Qt
- D8048:无法使用 /ZW 选项编译 C 文件 'openssl\applink.c'
- Openssl Sha1 编译问题
- 在Ubuntu 11.10上编译C++和OpenSSL
- 如何在Windows上编译OpenSSL
- 你如何为 x64 编译 OpenSSL