我正在尝试使用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配置无共享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在我的CFLAG中定义为nt.mak,如果我更了解Perl编程,我可能会找到我没看到的配置选项,但是现在我只能'弄明白了。
同样,32位似乎在非常类似的构建指令后工作得很好。我想知道是否可能是古老的Eric Young和Tim Hudson没有时间测试这个特定的构建配置,或者它是否是我忽略的完全愚蠢的东西。
非常感谢能够帮助调试此问题的任何人!
答案 0 :(得分:1)
好的,所以这个问题的答案似乎都是两者兼而有之。是的,似乎还有一些与64位版本的OpenSSL 1.0.1e的汇编版本有关的工作。并且,是的,暂时的解决方案应该是显而易见的。
使用no-asm指令,我在上面的perl配置步骤中使用了no-shared。
当然,这告诉OpenSSL我们不构建汇编程序库,因此它将在C代码中编译。问题解决了!
感谢Eric和Tim,您可以免费为我们其他人提供这个非常有价值的软件库!