LoginSignup
2
0

More than 5 years have passed since last update.

Visual Studio 2017でlibtorrentのdllを使ってBitTorrentクライアントをビルドしてみた (2019年版)

Last updated at Posted at 2018-05-20

使ったもの

やったこと

Boost 1.69.0の準備

  1. ダウンロードしたソースを展開
  2. Windowsの環境変数設定から、ユーザー環境変数BOOST_ROOTに展開先ディレクトリを設定。BOOST_BUILD_PATHに展開先ディレクトリを設定。Pathに展開先ディレクトリを追加。
  3. VS 2017用 x64 Native Toolsコマンドプロンプト(スタートメニューから起動できる)を起動し展開先ディレクトリに移動
  4. 展開先ディレクトリにあるbootstrap.batを実行してビルドツールb2.exeを作成(b2.exeは展開先ディレクトリにできているので、パスを通しておく。後でもう一度使う)
  5. b2 msvc -j4でビルド実行(これでdebug版ができる)
  6. 準備完了

libtorrent 1.1.7のビルド(標準の方法)

こちら https://www.libtorrent.org/building.html を参考に、libtorrent.libをビルドしていく。
1. git clone https://github.com/arvidn/libtorrent.gitで最新版ソースをダウンロード
2. Windowsの環境変数設定から、ユーザー環境変数LIBTORRENTに展開先ディレクトリを設定
3. VS 2017用 x64 Native Toolsコマンドプロンプト(スタートメニューから起動できる)を起動し展開先ディレクトリに移動
4. b2.exe msvc link=shared runtime-link=shared dht=on extension=on -j4でビルド実行。torrent.dllとtorrent.dllはbinディレクトリ以下に生成される
5. 準備完了

libtorrent付属のclient_testのビルドと実行

client_testはCUIベースのtorrentクライアント。きちんとライブラリがビルドできているかの確認に使うことができる。

  1. Visual Studio 2017のファイル > 新規作成 > プロジェクトから Visual C++ > Windowsデスクトップ > Windowsコンソールアプリケーション を選択して新規プロジェクト作成(仮にclient_testというプロジェクト名とする)
  2. デフォルトで含まれているclient_test.cpp, stdafx.cpp, stdafx.h, targetver.hをすべてプロジェクトから削除し、ファイル本体も削除
  3. libtorrent 1.1.7の展開先ディレクトリのexampleディレクトリ以下にあるclient_test.cpp print.cpp session_view.cpp torrent_view.cpp print.hpp session_view.hpp torrent_view.hppをプロジェクトに追加
  4. プロジェクト>(プロジェクト名)のプロパティについて以下の設定を行う
    • 構成を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を設定(もとからあったものを上書きした)
    • C/C++ > プリコンパイル済みヘッダ でプリコンパイル済みヘッダーを使用しないに設定
    • リンカー > 追加のライブラリディレクトリに先程ビルドしたtorrent.libがあるディレクトリを指定
    • リンカー > 入力 の追加の依存ファイルにtorrent.libを追加
    • torrent.dllをプロジェクトファイルのあるディレクトリにコピー
  5. Visual Studio画面の上部でDebug x86構成を選択してビルドを行うと、所望のexeファイルがソリューションディレクトリ以下のDebugディレクトリ内に生成された
  6. Ubuntuの配布用torrentファイルをダウンロードし、プロジェクトディレクトリ内に保存
  7. VS2017のデバッグ > コマンドライン引数にtorrentファイル名を設定。(ここではubuntu-16.04.5-desktop-amd64.iso.torrent)
  8. VS2017からデバッグ実行を行い、ファイルダウンロードが行われることを確認した
    • 注意点は、ポート6881から6889が開放されていないとlibtorrentはPort Control Protocol v2を使ってポートマッピングをしようとするが、ルーターがそれに対応していないと動作がそこで止まってしまう。WireSharkなどで動作確認しながら実験するのがおすすめ。 image.png
2
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0