2014年5月16日金曜日

MacでBoostはどんな感じ!?

昔、Boostを使えるようにLinuxやらMacでビルドしたことがあります。(おそろしく時間がかかりました)
そういえば今の新しいMac(Mavericks)になってからgcc→clangに変わったので、どうやってBoost使えるようにしたものかと思って調べてみました。(c++第4版ではBoostが標準ライブラリになるもんだと思ってましたが、正式には発表されてないみたいだし、そもそも第4版って発効されたんだろうか?でもBoost使いやすくていいと思ってます。)

そうしたらどうも、今のMavericksのXcode5だと素直にはBoostはビルドできないらしい。問題なのはXcode5でインストールされるcコンパイラがclangで、libstdc++-4.2.1(実際、gccのバージョンを調べてみるとこういってきます)のため、4.3以降に実装されたstd::moveがなく、boostは当該関数があるのが前提で作られているらしく、ダメだとのこと。(がんばるなら、libc++をリンクするようにしたり、gccの最新版を別途インストールしないといけない。)

なんでこんなことになったのかというと、gnuがGPL v3を出したのが大元の原因らしい。(確かに数年前、OSSの方ではもめてましたね)gccがGPL v3にしたもんですから、これで仕事している人間たちはもっと縛りの緩いBSDライセンスなLLVM、clangを採用し始めたとのこと。(おかげでclangの開発が急に進みましたが)Linux kernelもv3は批判していて、未だにv2だったはずです。
でもLinux kernelはgccコンパイラでないとビルドできないようなgcc固有の機能を使っています。なんでgccコンパイラがGPL v3なのに、それを使っている(正確にはlibstd++に依存している)Linux Kernelがv2のままで居られるのかと思っていたら、gccのライセンスに抜け道が用意されていたらしく、gccでビルドしたものはv2でもいいよ(意訳)と書いてあるそうです。

さてここで本来のMacのBoostの問題に戻りますが、Macとしては新しいlibstdc++を採用したいが、GPL v3は採用したくない。そのためコンパイラをclangにしましたが、そうなるとlibstdc++-4.3からはGPL v3になるため、これを採用できない。という、風が吹けば桶屋、みたいな状況に陥っているようです。

まあclangの方が頑張ってくれれば問題はなくなるんですが、そもそもc++第4版の決定ってどうなったのよ?以前、c++第4版の決定稿の話を聞いた時は、これでしばらくコンパイラの実装が不安定になるなと悩んでいましたが、事態はそれとは別の方向に悩ましいことになってました。
(Boost関係とか実験するときは、しばらくLinuxでやるしかないようです。)

0 件のコメント:

コメントを投稿