Win32 C++ アプリケーションで libcurl を使用しています。
curllib.vcproj プロジェクトをソリューションに追加し、他のプロジェクトがそれに依存するように設定しました。
SSL サポートを有効にしてビルドするにはどうすればよいですか?
さて、この投稿はひどく失敗したので、私は自分で問題を掘り下げなければなりませんでした.
また、他のバージョンなどに関する追加情報については、他の回答とコメントを確認してください。
編集: この Q を投稿して以来、curl ホームページから利用できるビルド済みのバイナリがあるようです。ジェームズの答えをチェックしてください。
-
プリプロセッサ
libcurl で SSL を有効にするには、次の 2 つのシンボルをプリプロセッサに渡す必要があります。
USE_SSLEAY
USE_OPENSSL
(libcurl は SSL サポートに OpenSSL を使用します)
別の方法として、シンボルを libcurl の setup.h というファイルに直接追加することもできますが、本当に必要でない限り、サード パーティのディストリビューションのコードを変更することにあまり満足していません。
libcurl ライブラリを再構築すると、OpenSSL のインクルード ファイルが見つからないというエラーが発生しました。当然、OpenSSL ディストリビューションをまだ適切にセットアップしていないためです。
OpenSSL バイナリのコンパイル
OpenSSL 0.9.8 ソース配布をダウンロードして解凍しました。
ソース配布のルートには、OpenSSL バイナリをコンパイルする方法を説明する INSTALL.W32 というファイルがあります。ビルド チェーンには perl が必要なので、ActivePerl の最新バージョンをインストールしました。
すべてのシステムに当てはまるわけではないかもしれませんが、ビルドで問題が発生しましたが、誰かが同じ経験をした場合に備えて、ここで説明します.
INSTALL.W32 によると:
現在のディレクトリをソース配布ルートに設定して、次のコマンドライン タスクを実行します。
1> perl Configure VC-WIN32 --prefix=c:/some/openssl/dir
(「c:/some/openssl/dir」は、OpenSSL をインストールするディレクトリに置き換える必要があります。このパスにはスペースを使用しないでください。その場合、先のコンパイルは失敗します)
2> ms\do_ms
私の場合、環境変数 OSVERSION と TARGETCPU が不足していたため、この手順は最初はうまくいきませんでした。これらをそれぞれ5.1.2600とx86に設定しました。OSVERSION が「非常識」であるという苦情を受けるかもしれませんが、よく見てください。これは WinCE のエラーであり、Win32 のセットアップには影響しません。OS のバージョンを確認するには、コマンド プロンプトから「ver」コマンドを実行するか、winver.exe を実行します。
3> nmake -f ms\nt.mak (for static library)
また
3> nmake -f ms\ntdll.mak (for DLL)
ソースがコンパイルされます。私のラップトップで約5分かかりました。
コンパイルが完了すると、ライブラリまたはバイナリは次の場所に配置されます。
distroot/out32 - 静的ライブラリのビルド用
また
distroot/out32dll - DLL ビルド用
ビルドとリンク
ここで、Visual Studio に戻り、ライブラリを指摘し、ヘッダーのパスを含めます。インクルード ファイルは、distroot/inc32/opensslにあります。
libeay32.libとssleay32.libをリンカー入力として追加することを忘れないでください。
libcurl プロジェクトを再構築します。
エラー!
少なくとも、このバージョンの OpenSSL を使用している私にとっては。OpenSSL ヘッダーの 1 つにある struct typedef について不平を言っていました。これに関する情報は見つかりませんでした。1 時間のグーグル検索の後、私は独自の原則を破り、OpenSSL ヘッダーから typedef をコメントアウトしました。幸いなことに、libcurl はそのシンボルを使用していなかったため、正常にビルドされました。
更新: Jason が指摘したように、この問題はバージョン 1.0.0a で解消されたようです。
libcurl で SSL サポートが有効になっていることを確認するには、次のコードを実行します。
curl_version_info_data * vinfo = curl_version_info( CURLVERSION_NOW );
if( vinfo->features & CURL_VERSION_SSL )
// SSL support enabled
else
// No SSL
そのような単純な。
おそらくこれは誰も探している答えではないかもしれませんが、私はhttp://curl.haxx.se/download.htmlにあるこのリンクからコンパイル済みの DLL をダウンロードしただけです。
私はシャーキンが提供したテストを実行し、if( vinfo->features & CURL_VERSION_SSL )
真実であることが証明されました.
Robert Oschler のアドバイスに従って、回答としての質問に対する私のコメントを次に示します。
OpenSSL の代わりに、プリプロセッサ シンボル USE_WINDOWS_SSPI および USE_SCHANNEL を使用して、Windows のネイティブ SSL サポートを備えた最近の libcurl (2012) をビルドできます。
Visual Studio2010を使用してWindowsでOpenSSL1.0.0をコンパイルすると、最終的に0x2エラーがスローされました。
NMAKE:致命的なエラーU1077:'"C:\ Program Files(x86)\ Microsoft Visual Studio 10.0 \ VC \ BIN \ cl.EXE"':リターンコード '0x2'
止まる。
このエラーは、perlConfigureファイルのフラグ(-WX)が原因でスローされるようです。MSDNのドキュメントに記載されているように:
すべてのコンパイラ警告をエラーとして扱います。新しいプロジェクトの場合、すべてのコンパイルで/WXを使用するのが最適な場合があります。すべての警告を解決することで、見つけにくいコードの欠陥を最小限に抑えることができます。
構成ファイルで-WXオカレンスを削除し、ここに記載されているコマンドを再入力した後、正常にビルドされ、すべてのテストに合格しました。
\ fatal error C1083: Cannot open include
file: 'stdlib.h': No such file or directory
NMAKE: fatal error U1077::return code
このエラーは、Visual Studio で vcvarsall.bat を実行することで解決できます。
Visual Studio IDE でビルドして、次のような 58 個の奇妙な警告が表示された場合
「一貫性のない dll リンケージ curl_global_init / curl_msnprintf /...」
プリプロセッサ定義に CURL_STATICLIB を追加する必要があります。
したがって、定義行全体は次のようになります。
USE_SSLEAY;USE_OPENSSL;CURL_STATICLIB.
これですべての警告が消えます。
警告を無視してライブラリを使用し続ける人もいますが、curl_global_init / curl_msnprintf などの対応する *error* が発生します。非常に煩わしい場合があります。
それが誰かを助けることを願っています。
Windows7で「do_nt.bat」を実行しましたrc7100ヘッダーを正しくコピーするために「nmake-fms\nt.makinstall」を忘れないでください
おかげでこれは大いに役立ちました