【问题标题】:Building OpenSSL VC++ Static 64bit Libs构建 OpenSSL VC++ 静态 64 位库
【发布时间】:2013-03-11 23:46:09
【问题描述】:

我正在尝试使用 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 是否可能没有时间测试这个特定的构建配置,或者我忽略了一些完全愚蠢的事情。

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

【问题讨论】:

    标签: windows openssl 64-bit static-libraries


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 我也在尝试在 win 7 上为 64 位编译 openssl,就像你一样,我使用了 x86_amd64 环境。我终于让它工作了,但我得到了 bn_mul_mont 的重复符号,它位于 c 文件 bn_asm.c 和 x86_64-mont.asm 中,它们都用于编译 libeay32.lib。 C 代码中的函数受#ifdef 保护,但汇编代码不受保护(如果可以的话),并且makefile 中也没有代码来防止汇编代码编译。所以我不确定应该发生什么,当您在配置脚本中包含 no-asm 时,这当然会发生。有什么想法吗?
    猜你喜欢
    • 2011-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-09
    • 1970-01-01
    • 1970-01-01
    • 2014-01-17
    相关资源
    最近更新 更多