10

OpenSSL 1.0.1e ライブラリを使用する Windows 用の C++ アプリケーションに取り組んでいます。私はVisual Studio 2008を使用しています。

移植性の理由から、私のアプリケーションはランタイム ライブラリ (/MTおよび/MTdオプション) に対して静的にリンクされています。また、アプリケーションにランタイム ライブラリを同梱していません。

OpenSSL FAQによると、ライブラリはデフォルトでマルチスレッド DLL ランタイム ( /MDd) に対してリンクされていますが、これは明らかに私のシナリオと互換性がありません。applink.cしたがって、プログラムを機能させるために、プロジェクトに追加しました。私の開発マシンとほとんどのテスト コンピューターでは、プログラムは正常に動作します。

残念ながら、アプリが起動しないコンピューターを見つけました。Windows に次のエラーが表示されます。

The application failed to initialize properly (0xc0150002). Click on OK to
terminate the application. 

libeay32.dllDependency Walker で開いたところ、MSVCR90.dll見つからないことがわかりました。したがって、 のトリックは実際にapplink.cは機能しません。

/MTまたは/MTdオプションを使用して OpenSSL を構築するにはどうすればよいですか?

4

5 に答える 5

3

Windows で見つけた最も洗練されたオプションは、 http://p-nand-q.com/programming/windows/building_openssl_with_visual_studio_2013.htmlで提供されているスクリプトを使用することです。

スクリプト バージョンごとに VS2010/VS2013/VS2015 用のスクリプトを提供し、x86/x86-64 とランタイム MDd/MD/MTd/MT のすべての組み合わせをビルドします。

指示を引用する:

前提条件:

このスクリプトは、Windows を使用していることを前提としています。

このスクリプトは、Visual Studio 2010、2013、または 2015 がすべての通常の場所にインストールされていることを前提としています。重要: インストール フォルダーが異なる場合、マイレージは異なる場合があります。

このスクリプトは、このような OpenSSL tarball をダウンロードしたことを前提としています。

このスクリプトは、Python (2.7 または 3.x) がインストールされていて、PATH にあることを前提としています。

このスクリプトは、7-zip がインストールされていることを前提としています (PATH にある必要はありません)。使用するスクリプトを選択して編集します。たとえば、rebuild_openssl_vs2015.cmd の上部を見てみましょう。

T:

OPENSSL_VERSION=1.0.1p を設定

set SEVENZIP="C:\Program Files\7-Zip\7z.exe"

set VS2015="C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin\vcvars32.bat"

set VS2015_AMD64="C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin\amd64\vcvars64.bat"

そのため、非常に簡単に確認できます。OpenSSL のバージョンを手動で入力する必要があり、残りのバージョンには適切なデフォルトが設定されている必要があります...

注: このスクリプトは、OpenSSL の構築に SUBST T:\ ドライブを使用します。

テストしたところ、10 分もかからずに動作します。スクリプトの作成者に KUDOS !!

更新: x64 ビルドを生成するには、nasm アセンブラーをインストールして PATH に入れる必要があります。

于 2016-02-18T23:45:20.440 に答える
2

MT でプリコンパイルされた OpenSSL ライブラリが必要な場合は、ここを参照してください: http://www.npcglib.org/~stathis/blog/precompiled-openssl/ 接尾辞 MT/MD および " d" をデバッグ用に追加して、ライブラリを簡単に識別できるようにします。

さらに、多くの異なるバージョンの Visual Studio 用にそれらすべてを一度にビルドするための実際のビルド スクリプトも見つかります。私はそれらを自分でビルドして使用し、プロジェクトに DLL を必要としないバイナリを正確に生成します。

于 2014-09-22T10:50:53.097 に答える