你如何编译OpenSSL for x64?

时间:2008-10-01 15:30:19

标签: c++ c windows 64-bit win64

按照INSTALL.W64中的说明操作后,我遇到两个问题:

  • 代码仍写入“out32”文件夹。我需要能够在我的工作站上链接到32位和64位版本的库,所以我不希望64位版本破坏32位库。
  • 输出仍然是32位!这意味着我在尝试从x64应用程序链接到库时遇到“未解析的外部符号”错误。

8 个答案:

答案 0 :(得分:22)

要编译静态库(发布和调试),您需要执行以下操作:

  1. 安装Perl - www.activestate.com
  2. 运行“Visual Studio 2008 x64交叉工具命令提示符”(注意:常规命令提示符不起作用。)
  3. 配置 perl配置VC-WIN64A no-shared no-idea
  4. 运行:ms \ do_win64a
  5. 编辑ms \ nt.mak并在输出目录中将“32”更改为“64”:
  6.     # 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. 编辑ms \ nt.mak并从EX_LIBS中删除bufferoverflowu.lib如果您收到错误消息。
    2. 运行:nmake -f ms \ nt.mak
    3. 编辑ms \ do_win64a文件并向所有行添加“debug”,“ml64”和最后两行除外
    4. 运行:ms \ do_win64a
    5. 重复步骤4和5
    6. 将ms \ nt.mak文件和ADD / Zi编辑到CFLAG列表中!
    7. 运行:nmake -f ms \ nt.mak

答案 1 :(得分:3)

我使用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

答案 2 :(得分:3)

使用Conan。它的安装和使用非常简单。

您可以请求准备好使用的文件。例如,对于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" ...

答案 3 :(得分:2)

根据官方文件:

"您可能会感到惊讶:64位伪像确实在out32 *子目录中输出,并且熊名称以* 32.dll结尾。事实上,64位编译目标是迄今为止对传统32位Windows目标的增量更改。许多编译标志仍然标有" 32"虽然这些适用于32位和64位目标。"

所以不再需要第一个答案。

可在此处找到说明:

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

答案 4 :(得分:1)

如果你在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}

答案 5 :(得分:0)

自最初提出此问题以来,构建说明已更改。可以在here中找到新的说明。请注意,您将需要安装perl和NASM,并且需要使用developer命令提示符。

答案 6 :(得分:0)

在撰写本文时,最新的OpenSSL版本为1.1.1a。

环境:

  • Windows 10
  • MS Visual Studio 2017

先决条件:

  

确保Perl和NASM都在PATH环境变量中。

编译x64:

  1. 打开x64本机工具命令提示符
  2. perl配置VC-WIN64A --prefix = e:\ projects \ bin \ OpenSSL \ vc-win64a --openssldir = e:\ projects \ bin \ OpenSSL \ SSL
  3. nmake
  4. nmake测试
  5. nmake安装
  

步骤4是可选的。

编译x86:

  1. 打开x86本机工具命令提示符
  2. perl配置VC-WIN32 --prefix = e:\ projects \ bin \ OpenSSL \ vc-win32 --openssldir = e:\ projects \ bin \ OpenSSL \ SSL
  3. nmake
  4. nmake测试
  5. nmake安装
  

步骤4是可选的。

答案 7 :(得分:-1)

您还可以使用MSYS + mingw-w64

1)下载并将msys提取到C:\ msys
2)下载并提取mingw-w64到c:\ mingw64
3)运行msys postinstall脚本。当它要求你的mingw安装时,将它指向C:\ mingw64 \ bin
4)提取openssl每日快照(1.0.0版本有一个错误)。在源dir运行 配置mingw64
使
检查
make install
5)openssl安装到/ local /