1

我正在尝试使用 VC++ 2010 构建 OpenSSL 1.0.1e 静态 64 位库。(我像这样成功构建的最后一个是 1.0.1c,如果这可能是一个因素。目前我也能够成功构建1.0.1e 的 32 位版本没有问题。)

我相信我正在使用 ActiveState Perl、nasm 和所有正确的工具来进行此构建。INSTALL.W64 文件仅包含构建 DLL 的说明,遗憾的是我无法使用。

我正在调用正确的“%VS100COMNTOOLS%....\vc\bin\x86_amd64\vcvarsx86_amd64.bat”来设置环境,并且我确保 ActivePerl 位于我的路径的开头。

在尝试构建之前,我将删除所有旧的 inc*(当然“include”除外)、tmp* 和 out* 文件夹。我像过去一样调用“perl Configure no-shared VC-WIN64A”;虽然,我注意到 no-shared 似乎是这个版本的默认设置。我正在编辑 ms\do_win64a.bat 并将 no-asm 更改为 nasm,就像我在以前的版本中所做的那样。

然后我运行 ms\do_win64a.bat,并编辑生成的 ms\nt.mak 文件以将“32”更改为“64”,以防止我的 64 位构建破坏我的 32 位构建。我还将 /MD 更改为 /MT(就像我过去一直所做的那样),再次,以满足我特定的构建环境要求。

然后我运行 ms\nt.mak。这似乎只用几条警告消息构建了所有源,但是当 makefile 尝试编译 libeay32.lib 时,我得到一个“函数 BN_GF2m_mod_mul_arr 中引用的未解析的外部符号 bn_GF2m_mul_2x2”。(这在 crypto\bn\bn_gf2m.c 源代码中。)

所以我知道这是因为 OPENSSL_BN_ASM_GF2m 是在我的 nt.mak 的 CFLAG 中定义的,如果我对 Perl 编程有更好的理解,我可能会找到我没有看到的配置选项,但现在我想不通出去。

同样,按照非常相似的构建说明,32 位似乎也可以正常工作。我想知道可敬的 Eric Young 和 Tim Hudson 是否可能没有时间测试这个特定的构建配置,或者我忽略了它完全愚蠢的事情。

非常感谢任何能够帮助调试此问题的人!

4

1 回答 1

1

好的,所以这个问题的答案似乎是两者兼而有之。是的,对于 64 位版本的 OpenSSL 1.0.1e 的汇编器版本,似乎确实还有一些工作要做。而且,是的,暂时有一种解决方法应该是显而易见的。

在上面的 perl 配置步骤中使用 no-shared 的地方使用 no-asm 指令。

当然,这告诉 OpenSSL 我们没有构建汇编程序库,因此它将改为在 C 代码中编译。问题解决了!

感谢 Eric 和 Tim,感谢您免费提供给我们其他人的这个非常有价值的软件库!

于 2013-03-11T15:46:09.947 回答