使ったもの
- Visual Studio 2017 Community Edition
- libtorrent 最新版
- Boost 1.69.0 (https://dl.bintray.com/boostorg/release/1.69.0/source)
やったこと
Boost 1.69.0の準備
- ダウンロードしたソースを展開
- Windowsの環境変数設定から、ユーザー環境変数BOOST_ROOTに展開先ディレクトリを設定。BOOST_BUILD_PATHに展開先ディレクトリを設定。Pathに展開先ディレクトリを追加。
- VS 2017用 x64 Native Toolsコマンドプロンプト(スタートメニューから起動できる)を起動し展開先ディレクトリに移動
- 展開先ディレクトリにあるbootstrap.batを実行してビルドツールb2.exeを作成(b2.exeは展開先ディレクトリにできているので、パスを通しておく。後でもう一度使う)
- b2 msvc -j4でビルド実行(これでdebug版ができる)
- 準備完了
libtorrent 1.1.7のビルド(標準の方法)
こちら https://www.libtorrent.org/building.html を参考に、libtorrent.libをビルドしていく。
- git clone https://github.com/arvidn/libtorrent.gitで最新版ソースをダウンロード
- Windowsの環境変数設定から、ユーザー環境変数LIBTORRENTに展開先ディレクトリを設定
- VS 2017用 x64 Native Toolsコマンドプロンプト(スタートメニューから起動できる)を起動し展開先ディレクトリに移動
- b2.exe msvc link=shared runtime-link=shared dht=on extension=on -j4でビルド実行。torrent.dllとtorrent.dllはbinディレクトリ以下に生成される
- 準備完了
libtorrent付属のclient_testのビルドと実行
client_testはCUIベースのtorrentクライアント。きちんとライブラリがビルドできているかの確認に使うことができる。
- Visual Studio 2017のファイル > 新規作成 > プロジェクトから Visual C++ > Windowsデスクトップ > Windowsコンソールアプリケーション を選択して新規プロジェクト作成(仮にclient_testというプロジェクト名とする)
- デフォルトで含まれているclient_test.cpp, stdafx.cpp, stdafx.h, targetver.hをすべてプロジェクトから削除し、ファイル本体も削除
- libtorrent 1.1.7の展開先ディレクトリのexampleディレクトリ以下にある
client_test.cpp print.cpp session_view.cpp torrent_view.cpp print.hpp session_view.hpp torrent_view.hpp
をプロジェクトに追加 - プロジェクト>(プロジェクト名)のプロパティについて以下の設定を行う
- 構成をDebug、プラットフォームをx64に設定(以降の設定を構成Releaseについても繰り返す)
- C/C++ > 追加のインクルードディレクトリに$(BOOST_ROOT)と$(LIBTORRENT)\includeを追加
- C/C++ > プリプロセッサ > プリプロセッサの定義にをいくつか定義を加える。この定義をlibtorrentをビルドした時と同じものにしないと、ビルドエラーが出てしまうので注意。
- この定義は、libtorrentのビルドディレクトリに行き
b2.exe msvc --debug-building
で表示される<define>
後の定義を全て抜き出すことで得られる。 - 今回は
TORRENT_USE_I2P=1 _WIN32_WINNT=0x0600 BOOST_ALL_NO_LIB BOOST_ASIO_ENABLE_CANCELIO BOOST_ASIO_HAS_STD_CHRONO BOOST_MULTI_INDEX_DISABLE_SERIALIZATION BOOST_SYSTEM_DYN_LINK=1 BOOST_SYSTEM_NO_DEPRECATED TORRENT_LINKING_SHARED WIN32 WIN32_LEAN_AND_MEAN _CRT_SECURE_NO_DEPRECATE _FILE_OFFSET_BITS=64 _SCL_SECURE_NO_DEPRECATE _WIN32 __USE_W32_SOCKETS
を設定(もとからあったものを上書きした)
- この定義は、libtorrentのビルドディレクトリに行き
- C/C++ > プリコンパイル済みヘッダ でプリコンパイル済みヘッダーを使用しないに設定
- リンカー > 追加のライブラリディレクトリに先程ビルドしたtorrent.libがあるディレクトリを指定
- リンカー > 入力 の追加の依存ファイルにtorrent.libを追加
- torrent.dllをプロジェクトファイルのあるディレクトリにコピー
- Visual Studio画面の上部でDebug x86構成を選択してビルドを行うと、所望のexeファイルがソリューションディレクトリ以下のDebugディレクトリ内に生成された
- Ubuntuの配布用torrentファイルをダウンロードし、プロジェクトディレクトリ内に保存
- VS2017のデバッグ > コマンドライン引数にtorrentファイル名を設定。(ここではubuntu-16.04.5-desktop-amd64.iso.torrent)
- VS2017からデバッグ実行を行い、ファイルダウンロードが行われることを確認した