Win32 C++アプリケーションでlibcurlを使用しています。
ソリューションにcurllib.vcprojプロジェクトを追加し、他のプロジェクトがそれに依存するように設定しています。
SSLサポートを有効にしてビルドするにはどうすればよいですか?
まあ、この投稿はひどく失敗したので、自分で問題を掘り下げなければなりませんでした。
また、他のバージョンなどに関する追加情報については、他の回答とコメントも確認してください。
編集:このQを投稿したので、カールのホームページから利用可能な既製のバイナリがあるようです。チェックアウト ジェームズの答え 。
-
プリプロセッサ
LibcurlのSSLを有効にするには、次の2つのシンボルをプリプロセッサに供給する必要があります。
USE_SSLEAY
USE_OPENSSL
(libcurlはSSLサポートにOpenSSLを使用します)
または、libcurlのsetup.hというファイルにシンボルを直接追加することもできますが、本当に必要な場合を除き、サードパーティのディストリビューションのコードを変更するのはあまり喜ばしくありません。
Libcurlライブラリを再構築すると、OpenSSLのインクルードファイルが見つからないというエラーが発生しました。当然、OpenSSLディストリビューションをまだ適切にセットアップしていないためです。
OpenSSLバイナリのコンパイル
OpenSSL 0.9.8ソースディストリビューションをダウンロードして解凍しました。
ソース配布物のルートには、INSTALL.W32というファイルがあり、OpenSSLバイナリのコンパイル方法が記述されています。ビルドチェーンには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-for DLL build
構築とリンク
ここで、Visual Studioに戻ってライブラリを指定し、ヘッダーのパスを含めます。インクルードファイルはdistroot/inc32/opensslにあります。
libeay32.libおよびssleay32.libをリンカー入力として追加することを忘れないでください。
Libcurlプロジェクトを再ビルドします。
エラー!
少なくとも私にとっては、このバージョンのOpenSSLについては。 OpenSSLヘッダーの1つのstruct typedefについて不平を言いました。これに関する情報が見つかりませんでした。 1時間のグーグル検索の後、私は独自の原則を破り、OpenSSLヘッダーからtypedefをコメントアウトしました。
更新: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
そのような単純な。
たぶんこれは誰も探している答えではないかもしれませんが、 this link から http://curl.haxx.se/download.html
Sharkinが提供するテストを実行し、if( vinfo->features & CURL_VERSION_SSL )
が真であることが証明されました。
ロバート・オシュラーのアドバイスに従い、質問に対する回答としての私のコメントを以下に示します。
OpenSSLの代わりにUSE_WINDOWS_SSPIおよびUSE_SCHANNELのプリプロセッサシンボルを使用して、WindowsのネイティブSSLサポートを使用して、最近のlibcurl(2012)を構築できます。
WindowsでVisual Studio 2010を使用してOpenSSL 1.0.0をコンパイルすると、最終的に0x2エラーがスローされました。
NMAKE:致命的なエラーU1077: '"C:\ Program Files(x86)\ Microsoft Visual Studio 10.0\VC\BIN\cl.EXE"':リターンコード '0x2'
やめる。
このエラーは、Perl Configureファイルのフラグ、つまり-WXが原因でスローされるようです。 MSDNドキュメントの状態:
すべてのコンパイラ警告をエラーとして扱います。新しいプロジェクトでは、すべてのコンパイルで/ WXを使用するのが最善かもしれません。すべての警告を解決することで、見つけにくいコードの欠陥を最小限に抑えることができます。
Configureファイルで-WXオカレンスを削除し、記載されているコマンドを再入力すると here 正常にビルドされ、すべてのテストに合格しました。
私の場合、curl READMEファイルで十分でした。
私の構成は次のとおりです。
curl-7.57.0\projects
に移動しますopenssl
に変更し、curlフォルダーを別に置いてください。これは、VSプロジェクトを開くときに重要です。そこにopensslが見つかると期待しています。build-openssl.bat
を実行して、openSSLのコンパイルを実行します。私の設定では、これは次のようになりました:.\build-openssl.bat vc14 x64 release ..\..\openssl\
.\build-openssl.bat -help
を実行するだけです。openssl\build\Win64
curl-7.57.0\projects\Windows\VC14\curl-all.sln
を開きますLIB Release - LIB OpenSSL
)curl-7.57.0\build\Win64\VC14\LIB Release - LIB OpenSSL\libcurl.lib
にありますCURL_STATICLIB
プリプロセッサを定義することを忘れないでくださいCURL_DISABLE_LDAP
beforelibcurlをコンパイルします。\ 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 *を取得します。それは非常に迷惑です。
それが誰かを助けることを願っています。
上記への応答および/または追加の注記。
最初に、ActivePerlをいじりたくない場合は、 Strawberry Perl が素晴らしいです。
第二に、do_ms。batを使用する代わりに、do_masm可能な場合、INSTALL.W32によると、
これは、コードの高速化につながるため、実行する価値があります。たとえば、通常、RSAルーチンの速度は2倍になります。
また、OpenSSLのビルド0.9.8l(L)は悪夢だったため、最終的にあきらめて0.9.8kに戻しましたlibcurl 1.9で問題なく構築およびリンク(静的に)。
libcurlのダウンロードページ に移動し、Source Archivesの下にZipファイルをダウンロードします。 私の場合は curl-7.58.0.Zip
と呼ばれます
アーカイブを抽出し、Visual Studioでprojects/Windows/VC15/curl_all.sln
を開きます。
OpenSSLのWindowsバイナリをダウンロードします。私の場合、Windowsインストーラーファイル Win32 OpenSSL v1.1.0g
を Shining Light Productionsディストリビューション からダウンロードしました。
私のインストールフォルダはC:\OpenSSL-Win32
です。
curl_all.sln
Visual Studioソリューションファイルで、ビルド構成をDLL Debug - DLL OpenSSL
に変更します。
ソリューションエクスプローラーで、プロジェクトcurl
を右クリックし、[プロパティ]に移動します。
Linker -> General
でAdditional Library Directories
を変更し、OpenSSL directory + \lib
へのパスを追加します。私の場合、これはC:\OpenSSL-Win32\lib
です。
プロパティウィンドウを適用して閉じます。
プロジェクトlibcurl
を右クリックし、前のステップと同じように、OpenSSL directory + \lib
の下のAdditional Library Directories
にLinker -> General
を追加します。
C/C++ -> General
の下で、C:\OpenSSL-Win32\include
をAdditional Include Directories
に追加します。
最後に、Linker -> Input
に移動して、Additional Dependencies
を変更します。すべてのlibファイルを次のものに置き換えます。
ws2_32.lib
wldap32.lib
openssl.lib
libssl.lib
libcrypto.lib
プロパティウィンドウを適用して閉じます。
DLL Debug - DLL OpenSSL
ビルド構成を選択したまま、Build -> Build Solution
に移動します。
2つのdllファイルlibcrypto-1_1.dll
およびlibssl-1_1.dll
をOpenSSL binディレクトリ(C:\OpenSSL-Win32\bin
)から、作成したばかりのビルドディレクトリcurl-7.58.0\build\Win32\VC15\DLL Debug - DLL OpenSSL
にコピーします。
ビルドディレクトリ内で、curld.exe
を実行します。エラーなしで実行された場合(dllが見つからないなど)、ビルドは成功しました。