1

私は、VC ++2010を使用してOpenSSL1.0.1e静的64ビットライブラリをビルドしようとしています(これが要因である可能性がある場合、このように正常にビルドした最後のライブラリは1.0.1cでした。現在、正常にビルドすることもできます。問題なく1.0.1eの32ビットフレーバー。)

私はActiveStatePerl、nasm、およびこのビルドを行うためのすべての正しいツールを使用していると思います。INSTALL.W64ファイルには、DLLをビルドするための命令しか含まれていませんが、残念ながら使用できません。

適切な「%VS100COMNTOOLS%.... \ vc \ bin \ x86_amd64 \ vcvarsx86_amd64.bat」を呼び出して環境をセットアップし、ActivePerlがパスの先頭にあることを確認しています。

ビルドを試みる前に、すべての古いinc *(もちろん、「include」を除く)、tmp *、およびout*フォルダーを削除しています。私は以前と同じように「perlConfigureno-sharedVC-WIN64A」と呼んでいます。ただし、このバージョンでは、共有なしがデフォルトのようです。以前のバージョンと同様に、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ビットは非常によく似たビルド手順に従って問題なく動作するようです。由緒あるエリック・ヤングとティム・ハドソンがこの特定のビルド構成をテストする時間がなかったのではないか、それとも私が見落としているのは完全にばかげたものなのだろうか。

この問題のデバッグを手伝ってくれるかもしれない人に感謝します!

4

1 に答える 1

1

わかりました。この質問に対する答えは、両方に少しあるようです。はい、OpenSSL 1.0.1e の 64 ビット バージョンのアセンブラー バージョンで行う作業がいくつかあるようです。そして、はい、当分の間、明らかなはずの回避策があります。

上記の perl 構成ステップで no-shared を使用していたところに no-asm 命令を使用します。

もちろん、これは OpenSSL にアセンブラー ライブラリをビルドしていないことを伝えるため、代わりに C コードでコンパイルします。問題が解決しました!

エリックとティム、あなたが私たちに無料で提供してくれたこの非常に貴重なソフトウェア ライブラリに感謝します!

于 2013-03-11T15:46:09.947 に答える