libcurlをVisual Studio 2012を使って、Windows10(64bit)上でビルドした手順。~必要な資源のダウンロードからビルドまで~


Windowsで動作するlibcurlのビルド手順を記載します。

1.libcurlのビルドに必要な資源

libcurlをWindowsでビルドするには、libcurlの本体ソース以外に、以下の資源が必要です。
全てダウンロードして下さい。

資源 ダウンロードURL
libcurl https://curl.haxx.se/download.html
OpenSSL https://www.openssl.org/source/
libssh2 https://www.libssh2.org/
nghttp2 https://github.com/nghttp2/nghttp2
zlib http://www.zlib.net/

また、上記の他に、下記のフリーソフトも必要なので、もしビルド環境にインストールされていない場合は、事前にインストールをお願い致します。

フリーソフト ダウンロードURL
Active perl http://www.activestate.com/activeperl/downloads
7-zip http://www.7-zip.org/
CMAKE https://cmake.org/

上記2つのインストールが完了したら、libcurlのビルドを始めていきましょう。

2.OpsnSSLのビルド

OpenSSLのビルドは、以下の事を注意して下さい。(私は下記のような事をしらずにかなりはまりました。)

・ビルド時のコマンドプロンプトは必ず<strong>Visual Studio 開発者向けコマンドプロンプト</strong>を使用して下さい。
・32bitマシンでビルドする場合は、”x64 cross tools コマンド プロンプト”を使用して下さい。
・penSSLは、バージョンによって、ビルド方法も、出力dllも異なるので、バージョンの異なるOpenSSLを使用するときは、付属のINSTALLファイルを確認して下さい。

それでは、ひとつひとつ順を追って説明していきます。

OpenSSLのホームページに行き、”Download”をクリック


f:id:microsoftcream87:20170422104919j:plain

古いバージョンのOpen SSLを使いたい場合は、Old Rerease のページから選びましょう。


f:id:microsoftcream87:20170422105126j:plain

ダウンロードしたファイルを適当なフォルダに展開します。

f:id:microsoftcream87:20170422105337j:plain

Visual Studio 開発者向けコマンドプロンプト を管理者権限で起動。


f:id:microsoftcream87:20170422105523j:plain

コマンドプロンプトから、以下のコマンドを実行

cd c:\openssl\openssl-1.0.1e
perl Configure no-asm --prefix=..\x64 VC-WIN64A
ms\do_win64a.bat
nmake -f ms\ntdll.mak install

ライブラリが出来ている事を確認

    • prefixで指定した、ライブラリ出力フォルダに「ssleay32.dll」が出来ていたら成功

3.zlibのビルド

ダウンロードしたzlibを適当なフォルダに解凍する。

f:id:microsoftcream87:20170422192213j:plain

「contrib」フォルダから、ビルドするVisual Studioのソリューションファイルを開く。

Visual Studioで開いたら、構成マネージャーより、アクティブソリューションと、プラットフォームを設定。

f:id:microsoftcream87:20170422192442j:plain

ビルドして、「x64」フォルダに、dllが作成されたら完成

f:id:microsoftcream87:20170422192531j:plain

4.libSSH2のビルド

ダウンロードしたファイルを適当なフォルダに解答する。

f:id:microsoftcream87:20170422192719j:plain

win32フォルダのlibssh2.dswを、Visual Studioで開く。

f:id:microsoftcream87:20170422192847j:plain

ビルドの構成マネージャより、「アクティブソリューションプラットフォーム」を選択し、x64を新規作成。

f:id:microsoftcream87:20170422194018j:plain

ビルドの構成マネージャより、「アクティブソリューション構成」を、「DLL Release」に変更する。

f:id:microsoftcream87:20170422194135j:plain

libssh2の「構成プロパティ」より、「追加のインクルードディレクトリ」に、「OpenSSL」と、「zlib」のパスをセット。

f:id:microsoftcream87:20170422194239j:plain

構成プロパティの「リンカー」 - 「全般」で、「追加のライブラリディレクトリ」をセット

f:id:microsoftcream87:20170422194349j:plain

「構成プロパティ」の「追加の依存ファイル」に、「OpenSSL」と「Zlib」のパスをセット

f:id:microsoftcream87:20170422194452j:plain

ビルドして、出力先に指定した「Release_dll」フォルダに、「libssh2.dll」「libssh2.lib」が出力されていれば完了。

f:id:microsoftcream87:20170422194647j:plain

5.nghttp2のビルド

ダウンロードしたソースを解凍する。

VS012 x64 cross tools コマンドプロンプト」を管理者権限で起動し、以下のコマンドを実行。

cmake -G "Visual Studio 11 2012 Win64" .
cmake --build ./

※このコマンドの目的は、nghttp2を64bitバージョンでビルドする為。
詳細は、下記のURLを参照。
Windows 10でMSVCでnghttp2のサンプルを動かす   
http://abrakatabura.hatenablog.com/entry/2017/01/14/072846

ビルドをすると、同フォルダにnghttp2.slnが作成されているので、Visual Studioで開く。

「nghttp2ver.h」の確認 ※重要

\lib\includes\nghttp2を開き、中に「nghttp2ver.h」が無い場合は、nghttp2ver.inをリネームして作成。
また、その際、中身を開いてバージョン情報が記載する事。

32行目
#define NGHTTP2_VERSION "1.17.0"

40行目
#define NGHTTP2_VERSION_NUM 0x011100

Visual Studioで開き、ビルドを実行。

\nghttp2\lib\Release直下に、nghttp2.dll、nghttp2.exp、nghttp2.libが作成されている事を確認。


※何回かビルドしていると、nghttp2.libが作成されていないケースがあったので注意。
nghttp2.libが出来ていない場合は、もう一度ダウンロードした圧縮ファイルの解凍からやり直す事によりうまくいきました。

6.libcurlのビルド

ダウンロードしたファイルを展開し、適当なフォルダに置く。

f:id:microsoftcream87:20170422195353j:plain

Visual Studio のソリューションファイルを開く。

ファイルは、”\projects\Windows”直下に、Visual Studioのバージョンごとに存在するので、今回使用するVisual Studioのバージョンに合わせたものを使用。

例えば、Visual Studio 2012を使用する場合は、

C:\curl\curl-7.51.0\projects\Windows\VC11\curl-all.sln

を使用。

構成、プラットフォームを変更する。

f:id:microsoftcream87:20170422195556j:plain


例としては、以下のような感じに。

構成:DLL Release - DL OpenSSL -DLL LibSSH2

プラットフォーム:x64

「追加のインクルードディレクトリ」に、OpenSSLと、libssh2、nghttp2のインクルードパスを指定する。

f:id:microsoftcream87:20170422195645j:plain

※例としては、以下のような感じに

OpenSSL:C:\openssl\x64\include

Libssh2:C:\libssh2\libssh2-1.2.7\include

nghttp2:C:\nghttp2\nghttp2-1.17.0\lib\includes

「構成プロパティ」の「リンカー」 - 「全般」タグより、「追加のライブラリディレクトリ」に、OpenSSL、libssh2、nghttp2のライブラリパスを指定。

f:id:microsoftcream87:20170422195848j:plain

※例としては以下の通り

OpenSSL:C:\openssl\x64\lib

Libssh2:C:\libssh2\libssh2-1.2.7\win32\Release_dll

nghttp2:C:\nghttp2\nghttp2-1.17.0\lib\Release

※.libのパスを指定する事に注意

「構成プロパティ」の「リンカー」 - 「入力」タグより、「追加の依依存ファイル」に、OpenSSL、libssh2、nghttp2のライブラリファイル名を指定

f:id:microsoftcream87:20170422200100j:plain

※例としてはは以下のとおり

OpenSSL:ssleay32.lib;libssh2.lib

Libssh2:nghttp2.lib

nghttp2:nghttp2.lib

※.libを指定する事に注意

ビルドして、”build”フォルダ内の該当フォルダ内に、libcurl.dll、libcurl.exp、libcurl.libが出来れば完成。

f:id:microsoftcream87:20170422200246j:plain