19

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

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

8 回答 8

25

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

  1. 安装 Perl - www.activestate.com
  2. 运行“Visual Studio 2008 x64 Cross Tools 命令提示符”(注意:常规命令提示符将不起作用。)
  3. 用perl配置 配置VC-WIN64A no-shared no-idea
  4. 运行:ms\do_win64a
  5. 编辑 ms\nt.mak 并将输出目录中的“32”更改为“64”:
    # 所有有趣的东西的输出目录
    OUT_D=out64.dbg
    # 所有临时垃圾的输出目录
    TMP_D=tmp64.dbg
    # 头文件的输出目录
    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 文件并将“调试”添加到所有行,除了“ml64”和最后两行
  4. 运行:ms\do_win64a
  5. 重复步骤 4 和 5
  6. 编辑 ms\nt.mak 文件并将 /Zi 添加到 CFLAG 列表中!
  7. 运行:nmake -f ms\nt.mak
于 2008-10-01T15:33:27.323 回答
4

我使用 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
于 2012-11-21T19:38:43.593 回答
3

使用柯南。安装和使用非常简单。

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

于 2017-06-02T00:12:26.020 回答
2

在撰写本指南时,OpenSSL 的最新版本是 1.1.1a。

环境:

  • 视窗 10
  • 微软视觉工作室 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. 制作
  4. nmake 测试
  5. 制作安装

第 4 步是可选的。

编译 x86:

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

第 4 步是可选的。

于 2018-12-03T16:59:09.627 回答
2

根据官方文档:

“您可能会感到惊讶:64 位人工制品确实在 out32* 子目录中输出,并且名称以 *32.dll 结尾。事实上,到目前为止,64 位编译目标是对传统 32 位 Windows 目标的增量更改。大量编译标志仍然标记为“32”,尽管它们确实适用于 32 位和 64 位目标。”

因此,不再需要第一个答案。

说明可以在这里找到:

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

于 2016-07-30T00:08:33.913 回答
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}
于 2011-03-07T11:00:06.330 回答
0

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

于 2018-10-12T14:23:56.410 回答
-1

You can also use MSYS+mingw-w64:

1) download and extract msys to C:\msys
2) download and extract mingw-w64 to c:\mingw64
3) run msys postinstall script. When it asks for your mingw installation, point it to C:\mingw64\bin
4) Extract an openssl daily snapshot (1.0.0 release has a bug). In the source dir run configure mingw64
make
make check
make install
5) openssl is installed to /local/

于 2010-04-18T10:11:27.880 回答