64位Windows上的OpenSSL

时间:2013-03-25 23:41:06

标签: windows openssl 64-bit

我正在尝试在Windows 8上构建和链接OpenSSL,我发现它真的令人生畏。我应该提一下,我知道以下帖子

但他们都没有解决我真正需要知道的问题。因此,我决定与你们分享我作为新职位的经验!

首先,我可以在Win32操作系统上成功构建和链接OpenSSL,它完美无缺。我知道 Windows 8 附带WOW64。 “WOW64 is an x86 emulator that allows 32-bit Windows-based applications to run seamlessly on 64-bit Windows”,虽然当我运行构建在Windows 7 32位上的应用程序时,我收到错误“程序无法启动,因为您的计算机缺少libeay32.dll ... “while” libeay32.dll “显然存在并且没有丢失。

为了避免注册表丢失的东西,我尝试在Windows 8上以32位模式构建OpenSSL。构建成功完成,应用程序正确链接,没有错误。再次,当我运行应用程序时,我收到了相同的错误消息。

然后我尝试根据以下步骤在64位模式下构建它;

set PATH=%PATH%;c:\perl\bin;c:\nasm;
call "c:\visual studio\2012\vc\vcvarsall.bat" x64
perl Configure VC-WIN64A no-shared no-idea
call ms\do_win64a
copy ms\libeay32.def ms\libeay64.def /Y
copy ms\ssleay32.def ms\ssleay64.def /Y

ssed -e s/out32/out64/g ms\ntdll.mak | ssed … > ms\ntdll-64.mak
ssed -e s/out32/out64/g ms\nt.mak | ssed … > ms\nt-64.mak

nmake -f ms\ntdll-64.mak
nmake -f ms\ntdll-64.mak test
nmake -f ms\ntdll-64.mak install

在这种情况下,我在构建过程中收到了很多关于“数据转换和数据丢失可能性”的警告,但是它是在构建时“测试”失败“安装“生成的输出。

现在,当我尝试使用新的“ libeay64.lib和ssleay64.lib ”在Visual Studio中构建我的解决方案时,我收到了几千个错误,说“未解析的外部符号”

如果可能,请回答以下问题;

  1. 为什么我无法在Windows 8(64位)上运行我的32位应用程序?
  2. 为什么还要在Windows 8上正确构建OpenSSL(32位模式) 遇到同样的错误?
  3. 在OpenSSL版本(64位模式)中,我做错了吗?
  4. 我正在使用 OpenSSL ver 1.0.1e Visual Studio 2012 nasm 2.10.07

    由于

1 个答案:

答案 0 :(得分:1)

我正在回答你的问题:

您可以在WOW64中以64位运行32位。

对于64位以下的OpenSSL,visual studio下有一个编译器选项/ WX,这意味着将警告视为错误。从makefile中删除该编译器选项。你会得到很多警告。但OpenSSL将被编译。

由于大多数模块未编译且未生成其目标文件,因此您将收到链接器错误。如果它能解决您的问题,请告诉我。