Skip to content

libcurl導入方法

YASAI03 edited this page Jul 17, 2019 · 8 revisions

これは何

libcurl(7.65.1)導入時の導入方法を書き記します。(備忘録)

準備

  • Cmakeをインストールする
  • libcurlのソースをdownloadする(Windowsではなくページ一番上のを選ぶ)
  • Visual Studio2019をインストールする

Cmakeでprojectファイルを生成する

Cmakeを使ってvcprojファイルを生成します。
projectsディレクトリにもvcprojファイルがあるが、それはVS2019に対応していないので使わないこと

1. ソースファイルとビルド先を選ぶ

Where is the source code[Browse Source...]でダウンロードしたlibcurlを展開したディレクトリを選びます。
Where to build the binaries[Browse Build]でビルド先のディレクトリを選びます。
ビルド先!=ソースファイル
別のディレクトリを選ぶのが無難です。
1_Cmake

2. Configure

まずは1回[Configure]を押します。
すると次のような画面が出ます。
2_Cmake

Specify the generator for this projectに
Visual Studio 16 2019
Optional platform for generatorに
x64 を選びます。(上の画像の通りでOK)

[Finish]を押すとConfigureの設定が自動で始まります。しばし待ちましょう。
赤いボックスがたくさん出てきます。(エラーではないので安心してください。)
下の画像の通り設定しましょう。具体的に変わったところは

  • BUILD_CURL_EXEのチェックを外す(使わないので)(まあ任意)
  • CMAKE_USE_WINSSLのチェックを入れる(入れないとhttpsのサイトの情報が取得できない)
  • ENABLE_DEBUGのチェックを入れる
    以上を設定したら、再度[Configure]を押します。
    下の画像のようになるはずです。
    3_Cmake

すると再度赤いボックスが出てくるのでもう一度[Configure]を押します。
下のダイアログに"Configuring done"と出ればOKです。

3. Generate

[Generate]を押します。
下のダイアログに"Generating done"と出ればOKです。
ビルド先に生成したファイル群があるか確認しましょう。

生成したファイルを使ってdllを生成する

ビルド先の直下にCURL.slnがあるのでそれをVS2019で開きます。 4_VS2019
DebugとReleaseの構成それぞれ1回ずつソリューションのビルドをします。
すると"ビルド先/lib/Debug(Release)"にdllとかがあるはずです。
確認したらVS2019をいったん閉じます。

プロジェクトの設定をする

ファイル配置

VS2019でlibcurlを使いたいプロジェクトを開きます。
プロジェクトのディレクトリを開き、プロジェクトファイルと同じディレクトリにlibcurlフォルダを作ります。(おすすめはMain.cppとかおいてあるあたり)
そこにこんな感じでディレクトリを作ります。

└libcurl    
  ├include(解凍したソースファイル直下にあるincludeディレクトリをコピーする)
  └lib
    ├Debug(ビルド先/lib/Debugをコピーする)
    └Release(ビルド先/lib/Releaseをコピーする)

ただし、Debug(Release)内にあるdllファイルは一度取り除いてください。

プロパティ変更

5_VS2019

左上の構成をすべての構成にします。プラットフォームはx64です。
[VC++ディレクトリ]に行き、[インクルードディレクトリ]の編集画面を開きます。
新しい行に"$(ProjectDir)libcurl¥include"と入れOKを押します。
6_VS2019

適用をし、構成をDebugにして[ライブラリディレクトリ]に編集画面を開きます。
同様に新しい行に"$(ProjectDir)libcurl¥lib¥Debug"と入れOKを押します。
構成をReleaseにして同様に"$(ProjectDir)libcurl¥lib¥Release"と入れOKを押します。
一度適用を押した後[リンカー]->[入力]の[追加の依存ファイル]の編集画面を開きます。 ディレクトリ設定の時と同様に
Debugでは"libcurl-d_imp.lib"
Releaseでは"libcurl_imp.lib"
をそれぞれに追加します。

dll配置

Debug、Releaseそれぞれの構成で1度ビルドを行ってください。(HelloworldでOK)
次にプロパティの[全般]の[出力ディレクトリ]の編集画面を開きます。
7_VS2019
下のボックスのディレクトリ(反転している文字)のパスに行ってファイル配置で取り除いておいたdllを配置します。
具体的には
Debugに"libcurl-d.dll"
Releaseに"libcurl.dll"
以上を行ったらlibcurlを使うプログラムを実行して、動作確認出来たら終了です。

サンプルコード

#include <iostream>
#include <curl/curl.h>
using namespace std;
//TestCode
size_t callbackWrite(char* ptr, size_t size, size_t nmemb, std::string* stream) {
	size_t dataLength = size * nmemb;
	stream->append(ptr, dataLength);
	return dataLength;
}

int main() {
	CURL* curl;
	CURLcode ret;

	curl = curl_easy_init();
	std::string chunk;

	if (curl == NULL) {
		cerr << "curl_easy_init() failed" << endl;
		return 1;
	}

	curl_easy_setopt(curl, CURLOPT_URL, "https://www.google.com/");
	curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, callbackWrite);
	curl_easy_setopt(curl, CURLOPT_WRITEDATA, &chunk);
	ret = curl_easy_perform(curl);
	curl_easy_cleanup(curl);

	if (ret != CURLE_OK) {
		cerr << "curl_easy_perform() failed." << endl;;
		return 1;
	}
	cout << chunk << endl;
}

Error

E1696

インクルードディレクトリの設定を確認してください。

LNK1181

ライブラリディレクトリの設定を確認してください。

実行時にlibcurl(-d).dllが見つからないため...と出る

出力ファイルのディレクトリにdllが置いてあるか確認してください。

"curl_easy_perform() failed."になる

CMAKE_USE_WINSSLにちゃんとチェックを入れたか確認してください。

それ以外

わからん。でも大体ググれば出る。