1

它有点奇怪的故事。我正在尝试构建 openssl 库。好吧,这不是我第一次这样做,直到现在还不错。但是,我决定向 TeamCity 添加构建配置(实际上问题与 TeamCity 无关)以按需构建我所有的第三方库。因此,我使用一组常用的 openssl 构建命令创建了一个步骤:

perl 配置VC-WIN64A

ms\do_win64a.bat

nmake /d /f ms\ntdll.mak

...并且在组装第一个 asm 文件时构建失败。所以我在 VS2012 x64 命令提示符下运行了相同的命令,并且构建成功,正如预期的那样。我花了一段时间才发现问题出在输出重定向上。Teamcity 将构建步骤的输出重定向到 teamcity 构建日志,我也通过将“>1.txt”添加到“nmake /d /f ms\ntdll.mak”命令,构建失败。我会说构建失败的原因有点出乎意料。到目前为止,我已经尝试过:

  • 从带有重定向的 VS2010 命令提示符构建相同的内容,失败。
  • 在没有重定向的情况下从 VS2010 命令提示符构建相同的内容,成功。
  • 从 VS2010/VS2012 命令提示符构建相同的重定向到文件并强制重定向到 CON (nmake /d /f ms\ntdll.mak >CON >1.txt) 失败。
  • 谷歌搜索“重定向控制台输出时出现的 nmake 问题” - 没有
  • 谷歌搜索“重定向控制台输出时的openssl构建问题” - 没有

我的设置 - Win2008R2,虚拟机。- VS2010,最新更新 - VS2012,更新 1

实际错误: NMAKE : 致命错误 U1077: '"C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\BIN\amd64\ml64.EXE"' : return code '0x1' ml64.exe 抱怨 asm 文件说明它应该以“END”语句结尾。确实如此,但是……有什么想法吗?

4

1 回答 1

0

好的,由于问题出在 perl 并将文件写入标准输出然后重定向它,因此您必须更改以下文件以构建 x64 版本:

  1. 加密\aes\asm\aes-x86_64.pl
  2. 加密\bn\asm\modexp512-x86_64.pl
  3. 加密\bn\asm\x86_64-gf2m.pl
  4. 加密\bn\asm\x86_64-mont.pl
  5. 加密\bn\asm\x86_64-mont5.pl
  6. 加密\md5\asm\md5-x86_64.pl
  7. 加密\模式\asm\gash-x86_64.pl
  8. 加密\rc4\asm\rc4-md5-x86_64.pl
  9. 加密\rc4\asm\rc4-x86_64.pl
  10. 加密\sha\asm\sha1-x86_64.pl
  11. 加密\sha\asm\sha512-x86_64.pl
  12. 加密\whrlpool\asm\wp-x86_64.pl
  13. 加密\x86_64cpuid.pl
  14. 引擎\asm\e_padlock-x86_64.pl

您必须打开这些文件并将所有“open STDOUT“whateverfile””更改为“open my $asmfile”whaeverfile“”,然后处理字符串连接(仅在 x86_64cpuid.pl 中),然后将其打印到文件中的 STDOUT,类似于“print $code”到“print $asm $code”,当然,不要忘记关闭文件,换句话说,将“close STDOUT”更改为“close $asmfile”

显然,在构建 x64 以外的目标时,必须更改另一组文件。

将尝试将其传达给 openssl 维护者。

于 2013-01-31T13:58:43.820 回答