44

Win32 C++ アプリケーションで libcurl を使用しています。

curllib.vcproj プロジェクトをソリューションに追加し、他のプロジェクトがそれに依存するように設定しました。

SSL サポートを有効にしてビルドするにはどうすればよいですか?

4

10 に答える 10

48

さて、この投稿はひどく失敗したので、私は自分で問題を掘り下げなければなりませんでした.

また、他のバージョンなどに関する追加情報については、他の回答とコメントを確認してください。

編集: この 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.2600x86に設定しました。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.libssleay32.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

そのような単純な。

于 2008-10-13T21:14:15.430 に答える
9

おそらくこれは誰も探している答えではないかもしれませんが、私はhttp://curl.haxx.se/download.htmlにあるこのリンクからコンパイル済みの DLL をダウンロードしただけです。

私はシャーキンが提供したテストを実行し、if( vinfo->features & CURL_VERSION_SSL )真実であることが証明されました.

于 2011-02-26T19:28:02.503 に答える
6

Robert Oschler のアドバイスに従って、回答としての質問に対する私のコメントを次に示します。

OpenSSL の代わりに、プリプロセッサ シンボル USE_WINDOWS_SSPI および USE_SCHANNEL を使用して、Windows のネイティブ SSL サポートを備えた最近の libcurl (2012) をビルドできます。

于 2014-10-09T08:23:38.420 に答える
5

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オカレンスを削除し、ここに記載されているコマンドを再入力した後、正常にビルドされ、すべてのテストに合格しました。

于 2010-05-16T11:29:07.657 に答える
2
\ fatal error C1083: Cannot open include
file: 'stdlib.h': No such file or directory
NMAKE: fatal error U1077::return code 

このエラーは、Visual Studio で vcvarsall.bat を実行することで解決できます。

于 2012-03-17T14:10:07.470 に答える
2

Visual Studio IDE でビルドして、次のような 58 個の奇妙な警告が表示された場合

「一貫性のない dll リンケージ curl_global_init / curl_msnprintf /...」

プリプロセッサ定義に CURL_STATICLIB を追加する必要があります。

したがって、定義行全体は次のようになります。

USE_SSLEAY;USE_OPENSSL;CURL_STATICLIB.

これですべての警告が消えます。

警告を無視してライブラリを使用し続ける人もいますが、curl_global_init / curl_msnprintf などの対応する *error* が発生します。非常に煩わしい場合があります。

それが誰かを助けることを願っています。

于 2012-03-16T08:05:02.237 に答える
1

Windows7で「do_nt.bat」を実行しましたrc7100ヘッダーを正しくコピーするために「nmake-fms\nt.makinstall」を忘れないでください

おかげでこれは大いに役立ちました

于 2009-09-09T06:08:57.253 に答える