[choreonoid-users-ja 00037] Re: [MacOSX] build error in MultiAffine3Seq.cpp

Shin'ichiro Nakaoka s.nakaoka @ aist.go.jp
2012年 7月 24日 (火) 09:26:37 JST


菅さん

中岡です。
詳しい報告をありがとうございます。
なるほど、こちらではBoost 1.50 は試していなかったのですが、このバージョ
ンからまたいろいろと変更があって、対応できていなかったのですね。

まず、名前の衝突の件ですが、BoostのConcept Check でSequenceなどが定義さ
れていたのですね。おかげ様で、ページも見つかりました。
http://www.boost.org/doc/libs/1_50_0/libs/concept_check/reference.htm

それで、この問題に対する対応としましては、cnoid::Sequence の名前を
cnoid::Listing と変更することにしました。

あまり名前を変えるべきではありませんし、名前空間が違うので混ぜなければ使
えないこともないのですが、やはりboostのように良く使うライブラリと衝突し
ていると気持ち悪いし不便ですので、変えさせてもらうことにしました。

# しかし、boostは標準ライブラリと同様にクラスも小文字だけで定義されてい
ると信じていたのですが、まさか中途半端にこんな名前が定義されているとは…。

次に、BoostのFileSystemでは、1.50からFileSystemバージョン2のAPIが廃止に
なったのですね。これについては、バージョン3が導入されたのがBoost 1.44か
らで、Ubuntu 11.04 まではそれ以前のバージョンでしたので、まだしばらくは
バージョン2のAPIで統一できればと思っていました。しかしBoost最新版でバー
ジョン2が無くなった以上、しばらくは両方に対応させるしかなさそうで、両
バージョンの違いを吸収するラッパを書いて、対応させました。

以上について、ひととおり作業は終えましたので、もう少し確認をして問題がな
ければ、バージョン1.3.0としてリリースします。バイナリがアッパーコンパチ
でなくなる変更をする場合はマイナー番号を上げるということにしているので、
1.2は短命になってしまいますが、このようにしたいと思います。これで、Boost
1.50 にも対応できることになります。

また、MacでBalancerPlugin が読み込めない件ですが、私のホームディレクトリ
のパスを参照しているようで、お恥ずかしい限りです。共有ライブラリの参照の
設定がどうもLinuxと勝手が違って、まだよく分かっていないのですが、もう少
し調べてみます。うまく行けば、1.3.0で修正版を入れることにします。

とりあえず以上のような状況です。
重要なエラー報告をありがとうございました。



(07/22/12 13:25), Yuki Suga wrote:
> 中岡様:
> お世話になります.菅です.
> 
>> すみません、boostのSequenceというものが如何なるものかググってみたのです
>> が、ざっとみたところでは該当するものが見つけられませんでした。
> 
> エラーメッセージなどを見たところ,
> {boost_root}/boost/concept_check.hppで定義されているクラスのようです.
> 内部で利用されているんでしょうか・・・公式ドキュメントには記述がありませんが,
> 僕の環境boost1.50+MacOSX Lion+Xcode4.3.3ではコンパイルエラーになりました.
> エラーはこの通りです.
> 
> /Users/ysuga/Development/choreonoid-1.2.0-dirty/src/Util/MultiAffine3Seq.cpp:160:31:
> error: reference to 'Sequence' is ambiguous
> static void readAffine3(const Sequence& node, Affine3& out_value)
>                               ^
> /usr/local/boost_1_50_0/boost/concept_check.hpp:813:17: note:
> candidate found by name lookup is 'boost::Sequence'
>   BOOST_concept(Sequence,(S))
>                 ^
> /usr/local/boost_1_50_0/boost/concept/detail/concept_def.hpp:45:12:
> note: expanded from macro 'BOOST_concept'
>     struct name
>            ^
> /Users/ysuga/Development/choreonoid-1.2.0-dirty/src/Util/ValueTree.h:401:24:
> note: candidate found by name lookup is 'cnoid::Sequence'
>     class CNOID_EXPORT Sequence : public Collection
> 
> 
> この部分にcnoid::Sequenceとネームスペースを指定してコンパイルしたところ,
> boost1.50ではビルドエラーになりました.
> ただ,コンパイルを進めるとFileSystem関連でエラーが出たようで,
> そちらのエラーメッセージはこちらです.
> 
> In file included from
> /Users/ysuga/Development/choreonoid-1.2.0-dirty/src/Util/FileUtil.cpp:6:
> In file included from
> /Users/ysuga/Development/choreonoid-1.2.0-dirty/src/Util/FileUtil.h:9:
> In file included from /usr/local/boost_1_50_0/boost/filesystem.hpp:15:
> /usr/local/boost_1_50_0/boost/filesystem/config.hpp:16:5: error:
> #error Compiling Filesystem version 3 file with
> BOOST_FILESYSTEM_VERSION defined != 3
> #   error Compiling Filesystem version 3 file with
> BOOST_FILESYSTEM_VERSION defined != 3
>     ^
> 1 error generated.
> make[2]: *** [src/Util/CMakeFiles/CnoidUtil.dir/FileUtil.cpp.o] Error 1
> make[1]: *** [src/Util/CMakeFiles/CnoidUtil.dir/all] Error 2
> 
> boostを1.49に変えたところエラーが起こらずにビルド出来ました.
> 
> 
> 今はBalancerPluginを組み込んだところで下記のエラーが出ているので,
> Choreonoid自体の使い方を勉強しながら入門してます(笑)
> 
> Cannot load library
> /usr/local/lib/choreonoid-1.2/libCnoidBalancerPlugin.dylib:
> (dlopen(/usr/local/lib/choreonoid-1.2/libCnoidBalancerPlugin.dylib,
> 5): Library not loaded:
> /Users/nakaoka/choreonoid/lib/choreonoid-1.2/libCnoidBodyPlugin.dylib
>   Referenced from: /usr/local/lib/choreonoid-1.2/libCnoidBalancerPlugin.dylib
>   Reason: image not found)
> 
> とりあえずは,Sequenceの名前空間の件についてご確認いただきたいのと,
> boostのバージョンに関するエラーに関しても重ねてご報告さし上げました.
> 
> 今後はプラグイン開発を行っていく予定です.
> 
> ではでは
> 
> 
> 2012年7月22日 20:00 Shin'ichiro Nakaoka <s.nakaoka @ aist.go.jp>:
>>
>> 菅さん
>>
>> こんにちは、産総研の中岡です。
>> エラー報告ありがとうございます。
>>
>> すみません、boostのSequenceというものが如何なるものかググってみたのです
>> が、ざっとみたところでは該当するものが見つけられませんでした。
>> boostのどのバージョンをお使いで、Sequenceという名前がどのモジュールで定
>> 義されているかについて、分かる範囲で教えていただけますでしょうか。
>> できれば、エラーメッセージもあるとうれしいです。
>>
>>> これはどちらをお使いですか?(おそらくcnoid側かと・・・)
>>
>> はい、これはcnoidで定義されている方を想定しています。
>>
>> ついでに説明しますと、cnoid::Sequenceというのは以前のバージョンで
>> YamlSequence として定義していたものです。
>> 今回、名前をSequenceに変更しました。
>> その理由は、
>>
>> ・このクラスや他の関連クラス(Mapping等)は、必ずしもYAMLに依存するもので
>> はなく、YAMLとは独立した汎用的なデータ構造として使えるものであるため。
>>
>> ・コレオノイドで頻繁に使うクラスなので、上の背景と併せて、コンパクトな名
>> 前で使えた方がうれしいため。
>>
>> というところにあります。
>>
>> もちろん、あまり名前をころころ変えるのはよくないのですが、
>> 今回の変更は、CMakeのCNOID_ENABLE_BACKWARD_COMPATIBILITY を ON にしてお
>> くと(デフォルトでONになってます)、以前と同じヘッダとクラス名も使えるよ
>> うにしてあります。
>> ただ、プラグイン開発においては、なるべくこのスイッチをOFFにして、新しい
>> 方に対応させておいてもらえるとうれしいです。
>>
>> ただ、やはりSequenceという名前にしてしまうと、衝突の危険性が高かったかも
>> しれません。このあたり、記述の簡潔さとのバランスが難しいところですが…。
>>
>> 以上よろしくお願いいたします。
>>
>> (07/21/12 18:28), Yuki Suga wrote:
>>> Choreonoid MLの皆様:
>>> お世話になります.フリーランスの菅です.
>>>
>>> ChoreonoidがMacOSXに対応したということで,
>>> こちらで試してみていますがビルドで問題が発生したので報告します.
>>>
>>> MacOSX+Xcode4.3.3です.
>>> Eigen, boost, OSG, libyamlをソースからインストールし,
>>> Choreonoidのビルドを試しています.
>>>
>>> cmakeは
>>> cmake -DEIGEN_DIR=/usr/local/include/eigen3 -DOSG_DIR=/usr/local/include ../
>>> のようにコマンドラインで環境変数を設定しています.
>>>
>>> この後,makeを行うと,MultiAffine3Seq.cppでエラーが起こりました.
>>> 160行目の
>>> static readAffine3(const Sequence& node, Affine3& out_value)
>>> の部分で,Sequenceというクラス名が,
>>> cnoidネームスペースと,boostネームスペースの両方にまたがっており,
>>> またどちらもusing namespaceを使っているため,
>>> 曖昧であることが問題と考えられます.
>>> これはどちらをお使いですか?(おそらくcnoid側かと・・・)
>>>
>>> 他の方は問題は起きていないのでしょうか?
>>>
>>>
>>> 基本的な問題で恐縮なのですが,
>>> 対応方法等,お教えいただければと存じます.
>>>
>>>
>>> それでは
>>>
>>
>>
>> --
>> Shin'ichiro Nakaoka <s.nakaoka @ aist.go.jp>
>> _______________________________________________
>> choreonoid-users-ja mailing list
>> choreonoid-users-ja @ choreonoid.org
>> https://choreonoid.org/mailman/listinfo/choreonoid-users-ja
> 
> 
> 


-- 
Shin'ichiro Nakaoka <s.nakaoka @ aist.go.jp>


choreonoid-users-ja メーリングリストの案内