libtorrentとUPnPと時々Qt4

以前から

  • Qt4
  • libtorrent
  • (Boost: libtorrentで必要)

を利用したアプリを作っていたのですが、今時のご家庭のネットワーク環境はUPnP対応BBルータによるNA(P)T環境が普通かと思いますのでUPnPは必須の機能となります。

しかし、公式ページからDLできる0.12.1は未だUPnPをサポートしていません。ソースもざっと読んでみたのですが、UPnPという単語は全くgrepにひっかからない状況です。とはいえ、FuturesにUPnPサポートと書いてあるのでどうやら使えることは使えるようです。

あ、Qt4とか書いていますが、実際この記事だと関係なかったりします。あしからず。これはまたいつか別のお話ということで。

で、どうするかというと、結果からいえばSVNから適当に最新のバージョンを持ってくれば大丈夫です。だめでした。

公式ページからたどれるところにSVNのリポジトリ情報が書いてあるのでとりあえずChageLogを覗きます。TrunkにあるChageLogによると0.13のリリースがあるようです。で、BranchesをみるとRC_0_13というのがあります。リリースっていうかRCなのな。

得てしてHeadであるTrunkからもってくると開発中だったりしてコンパイルできないことがあるので、今回はこのRC_0_13を持ってくることにします。僕の場合はeclipseがインストールされているのでここら辺の作業は全部eclipse上でやっています。

それから必要なのがBoostとかasioです。asioはBoostにも含まれていく予定だった気がしますが、現状は別のページだと思います。

まずBoostのインストール。

とりあえず僕はソースからビルドしてみました。

Boostの多くはテンプレートな感じなのでヘッダだけあればそのまま使えるにくいやつなのですが、いくつかの機能はコンパイルする必要があります。そして今回使いたい機能はそこに該当しちゃうのでしかたなくコンパイルすることにします。Boostのソース一式をゲットしてきます。あとbjamというビルドツールが必要なので、それも探して持ってきます。パスが通った場所に置いておきましょう。

あ、忘れていましたが、今回はVS2005がインストールされた環境を前提にしています。

Boostのアーカイブを適当な場所に展開します。とりあえず僕はC:workboostとかに。ここにproject-root.jamというファイルがあるということを前提に進めます。そのファイルの名前通り、ここがbjamでビルドされるプロジェクトのルートになります。

VS2005がインストールされている環境ならスタートメニュにVS2005用のコマンドプロンプトを開くためのショートカットが用意されていますので、そのショートカットからコマンドプロンプトを開きます。これでVS2005関係のパスやらなんやらが自動的に設定されます。

cd c:workboost

とかやってプロジェクトのルートへ移動します。で、ここで一発

bjam release debug link=static runtime-link=static install

とか叩いてエンター。これでライブラリ一式がビルドされた上、C:Boostに必要なものがコピーされます。C:workboostはまだ消さないで。

次はlibtorrentのビルドをします。これも適当にC:worklibtorrentとかに展開します。同じくproject-root.jamがここにあるということにします。それからBoostのルートからboost-build.jamというファイルをコピーしてきます。で、こんな感じに編集します。

BOOST_ROOT = c:workboost ;
boost-build c:workboosttoolsbuildv2 ;

編集したら保存して同じようにVS用のコマンドプロンプトでこんなかんじ

cd c:worklibtorrent
bjam release debug link=static runtime-link=static

これでlibtorrentのライブラリが完成します。時間はかかるので待ちましょう。

ちなみにこのオプションだとライブラリ自体をスタティックにかつ、ランタイムもスタティックになるのでそのほかのライブラリも同様であれば完全にスタティックな実行ファイルができるわけですね。

ところで、結局今回持ってきたバージョンのソースでもUPnPは動きませんでした。うわーん。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください