スラきちの野望

技術系で紹介したいこととか、遊んだゲームなどを載せていくブログです。

apt-getでBoost C++を入れるときにハマった話

どうも( ^ω^)

つい最近Boost C++ ライブラリを必要とする機会があり、
apt-getを使って入れたのですが、
必要だったヘッダファイル(具体的にはprocess.hpp)が見つからない
といった問題が発生しました。

  • OS: Ubuntu16.04
  • パッケージ: libboost-dev

インストール先のディレクトリで検索をかけてみても引っかからなかったので、
そもそもパッケージに入ってなかったみたいです。
しかもバージョンが1.58なのでちょっと古い。


そこで以下のサイトの記述を参考に、
Github上にあるBoost最新版をクローンしてきてビルドするという手順を踏みました。
(バージョンは2017/11/19時点で1.66)
Ubuntuでc++17のために最新版のg++, boost, cmakeを自然に使う - Qiita

ビルド時のコマンド
1. 適当なディレクトリで
  git clone --recursive https://github.com/boostorg/boost.git
2. 生成されたboostディレクトリ内で
 ./bootstrap.sh
3. ./b2
4. sudo ./b2 install

ビルドをする手順は公式ページにも載っています。
1と3にやたら時間が掛かかりました。

しかし、これでもprocess.hppが存在しないと言われます。
悲しい。


いろいろと調べたところ、
Boostのprocessのみを扱う以下のリポジトリを見つけます。
GitHub - klemens-morgenstern/boost-process: Boost.Process is a library to manage system processes

ここにあるprocess.hppをBoostのデフォルトインストール先である/usr/local/include にコピーしました。
これでいけるだろ!と思いましたがBoostを使用するソースコードコンパイルする時に謎のエラーに見舞われます。


process.hppはバージョンが1.64のものらしいのでそこが原因と思い、
以下のサイトで1.64のBoostを持ってくることにしました。
Boost C++ Libraries - Browse /boost at SourceForge.net

ファイル形式はtar.bz2でダウンロードしたので、
tar --bzip2 -xf boost_1_64_0.tar.bz2 コマンドで解凍し、再びビルドします。

するとあら不思議、中にprocess.hppが入ってるじゃありませんか!

そしてビルド後すぐにコンパイルを試してみると普通に通りました。
なんでGithubのやつには入ってなかったんですかねぇ( ´_ゝ`)


ということで、
Boostをインストールするときは、apt-getやGithubのものではなく、
tar.bz2形式のものをダウンロードしたほうが良いかもというお話でした。


追記:
boostを入れた理由として、SamurAI Coding というコンテストに参加するための環境構築に必要だったという訳があったのですが、 boost1.64.0だとmakeによるコンパイルは通るけれど、実行できないという問題が発生します。

原因として、boost最新版(1.65.1)と1.64.0の間でコマンドラインパーサの仕様が変わっているらしく、そこで問題が発生しているようでした(たぶん)。

なので、もしこのコンテスト用にboostを新しく入れるという人がいましたら、以下のboost公式サイトからver1.65.1でtar.bz2方式のファイルをダウンロードし、ビルドすることをおすすめします。
Boost C++ Libraries