2

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

但他们都没有解决我真正需要知道的问题。因此,我决定将我的经验作为一个新帖子与大家分享!

首先,我可以在 Win32 操作系统上成功构建和链接 OpenSSL,并且它可以完美运行。我知道Windows 8带有WOW64。“<a href="http://msdn.microsoft.com/en-us/library/windows/desktop/aa384249%28v=vs.85%29.aspx" rel="nofollow noreferrer">WOW64 是一个 x86 模拟器允许基于 32 位 Windows 的应用程序在 64 位 Windows 上无缝运行”,但是当我运行基于 Windows 7 32 位构建的应用程序时,我收到错误“<strong>程序无法启动,因为您的计算机中缺少 libeay32.dll……</strong>”,而“<strong>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

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

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

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

  1. 为什么我无法在 Windows 8(64 位)上运行我的 32 位应用程序?
  2. 为什么在 Windows 8 上正确构建 OpenSSL(32 位模式),仍然遇到同样的错误?
  3. 在 OpenSSL 构建(64 位模式)中,我做错了吗?

我正在使用OpenSSL ver 1.0.1eVisual Studio 2012nasm 2.10.07

谢谢

4

1 回答 1

1

我部分回答你的问题:

你可以在WOW64中运行64位下的32位。

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

由于大多数模块都没有被编译并且它们的目标文件没有生成,这就是你得到链接器错误的原因。请让我知道它是否解决了您的问题。

于 2013-03-26T03:56:16.193 回答