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のコマンドプロンプトから同じものをビルドして成功。
  • ファイルへのリダイレクトと CON (nmake /d /f ms\ntdll.mak >CON >1.txt) へのリダイレクトを強制して、VS2010/VS2012 コマンド プロンプトから同じものをビルドすると失敗しました。
  • 「コンソール出力がリダイレクトされたときの nmake の問題」のグーグル検索 - 何もない
  • 「コンソール出力がリダイレクトされたときのopensslビルドの問題」のグーグル-何もない

私のセットアップ - Win2008R2、仮想マシン。- VS2010、最新のアップデート - VS2012、アップデート 1

実際のエラー: NMAKE: 致命的なエラー U1077: '"C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\BIN\amd64\ml64.EXE"': リターン コード '0x1' ml64.exe が asm ファイルについて不平を言う「END」ステートメントで終了する必要があると述べています。それはありますが... 何かアイデアはありますか?

4

1 に答える 1

0

問題は perl にあり、ファイルを stdout に書き込んでリダイレクトするため、x64 バージョンをビルドするには次のファイルを変更する必要があります。

  1. crypto\aes\asm\aes-x86_64.pl
  2. crypto\bn\asm\modexp512-x86_64.pl
  3. crypto\bn\asm\x86_64-gf2m.pl
  4. crypto\bn\asm\x86_64-mont.pl
  5. crypto\bn\asm\x86_64-mont5.pl
  6. crypto\md5\asm\md5-x86_64.pl
  7. crypto\modes\asm\ghash-x86_64.pl
  8. crypto\rc4\asm\rc4-md5-x86_64.pl
  9. crypto\rc4\asm\rc4-x86_64.pl
  10. crypto\sha\asm\sha1-x86_64.pl
  11. crypto\sha\asm\sha512-x86_64.pl
  12. crypto\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 に答える