[choreonoid-users-ja 00042] Mac OS X で Boost 1.50.0 を用いたビルドのエラーについて
Shin'ichiro Nakaoka
s.nakaoka @ aist.go.jp
2012年 7月 30日 (月) 20:31:01 JST
中岡です。
菅さんから、コレオノイド1.3.0でもMac OS XでBoost 1.50.0 を用いるとビルド
に失敗するという報告をいただき、調査しました。(菅さん報告ありがとうござ
います。)
まず、本症状をこちらでも確認できました。こちらのチェックが不十分であった
ことをお詫びします。
エラーとしては以下のようなリンクエラーがずらずらと出てしまいます。
Undefined symbols for architecture x86_64:
"boost::filesystem3::path::begin() const", referenced from:
cnoid::makePathCompact(boost::filesystem3::path&,
boost::filesystem3::path&)in FileUtil.cpp.o
コンパイルは通っていて、リンク時に filesystem のライブラリもリンクしてい
るので、不可解なエラーではあります。Ubuntu と Windows ではこのようなエ
ラーは出ていません。
そこで、よく分からなかったのですが、CMakeの生成するリンクコマンドで、
boost関係のリンクが
/usr/bin/c++ -O3 -DNDEBUG -dynamiclib ...
/Users/nakaoka/usr/boost-1.50.0/lib/libboost_filesystem.dylib
といったように、ライブラリファイルをフルパスで指定する形式になっていまし
た。特に当てがあったわけではないのですが、なんとなくこれを
-lboost_filesystem という通常のリンク指定に変えたところ、なぜかリンクが
通りました。
こちらで使っている他のBoostのバージョンでも、フルパス指定になりますが、
そちらはエラーも出ず、無事ビルドできます。
というわけで今のところ分かったことは、
・Boost 1.50.0 では filesystem ライブラリをフルパスで指定するとリンクエ
ラーになるが、 -l 形式で指定すればOK. Boostの他のバージョンやfilesystem
以外のライブラリについては、フルパス形式でも大丈夫
というものです。しかし、フルパス形式の指定も間違った指定というわけでもな
さそうなので、非常に不可解なエラーに思えます。
フルパス形式になっているのは、CMake標準添付のFindBoost.cmake というスク
リプトがそうするようになっているようです。ですので、FindBoostの使用を止
めて、直接リンクコマンドを記述するようにすれば、ビルドを通せそうです。で
もそれもいろいろと大変そうです。
というわけなので、当面Mac OS Xでは Boost 1.50.0 は非対応ということにいた
し、ドキュメントにも明記しておくことにします。
以上よろしくお願い致します。
--
Shin'ichiro Nakaoka <s.nakaoka @ aist.go.jp>
choreonoid-users-ja メーリングリストの案内