[choreonoid-users-ja 00103] Re: プラグインを置くディレクトリについて

中岡 慎一郎 s.nakaoka @ aist.go.jp
2013年 6月 18日 (火) 14:43:40 JST


産総研の中岡です。

> どうもgccのバージョンによってはこの症状があるようです。
> バグなのか仕様なのか分かりませんが、順番を変えるとリンクがされないという
> のはトラブルのもとですので、なんとかしてほしい気がいたします。

と書いたのですが、以下の説明にもあるように、どうもそういうもののようでした。
http://www.network-theory.co.uk/docs/gccintro/gccintro_18.html

gcc link order のキーワードで検索すると、これに関していろいろ出てきますね。

ただ、少し前のGCCでは少なくとも共有ライブラリに関しては順番が逆でも出来
ていた気がしますが…。

今後は気をつけるようにいたします。


(06/18/13 13:32), 中岡 慎一郎 wrote:
> 
> 小島さん
> 
> 産総研の中岡です。
> 
> Makefileによるサンプルのビルドにいろいろと不備があったようで申し訳ありま
> せん。
> 
> まず、
> 
>> CXXFLAGS += `pkg-config --cflags eigen3`            (追加した行)
>> CXXFLAGS += -I`echo $(HOME)`/src/choreonoid-1.3.1/src/Collision (追加した行)
>> CXXFLAGS += -fPIC                       (追加した行)
> 
> についてですが、これでよろしいかと思います。
> 
> eigen3 については本来choreonoidのpkg-configで依存関係を記述しておくべき
> なのですが、欠けていました。次期バージョンではこれを修正して、ユーザの
> Makefileではeigen3の記述がなくてもよいようにします。
> 
> 具体的には、misc/pkgconfig/choreonoid.pc.in の Requires: のところに
> eigen3 >= 3.0.0 を追加します。
> 
> また、
> 
>> 致命的エラー: CollisionPairInserter.h: そのようなファイルやディレクトリはありません
> 
> については、単純にこのファイルが make install で入れるべきファイルのリス
> トから抜けていたというミスでした。これも修正しておきます。
> 
> 具体的には、src/Collision/CMakeLists.txt の
> 
> set(headers
>  ...
> 
> のところに CollisionPairInserter.h を追加します。
> 
> fPICについては、環境によっては記述しなくても動くようなのですが、私の
> Ubuntu 12.04 64bitの環境でもダメでした。これについても、入れるよう修正し
> ておきます。
> 
> また、以上全てを適用しても、私の環境でも以下のエラーが出ることを確認しま
> した。
> 
>> Cannot load library
>> /usr/local/lib/choreonoid-1.3/libCnoidSample1Plugin.so:
>> (/usr/local/lib/choreonoid-1.3/libCnoidSample1Plugin.so: undefined
>> symbol: _ZTIN5cnoid8BodyItemE)
> 
> これについては良く分からなかったのですが、いろいろ試してみたところ、
> Makefileで
> 
> $(PLUGIN): $(SRC)
> 	g++ -shared `pkg-config --libs choreonoid-body-plugin` -o $(PLUGIN) $(SRC)
> 
> となっているところで、-o 以降の記述とそれより前の依存ライブラリの記述を
> 入れ替えて、
> 
> $(PLUGIN): $(SRC)
> 	g++ -shared -o $(PLUGIN) $(SRC) `pkg-config --libs choreonoid-body-plugin`
> 
> のように書きます。(ライブラリの本体のオブジェクトファイルが前に来るよう
> に記述します。)
> 
> するとlibCnoidBodyPlugin等とのリンクもちゃんと行われて、エラーなく実行で
> きるようになりました。
> 
> どうも不思議なのですが、修正前の記述ですと、
> 
> ldd libCnoidSample1Plugin.so
> 
> とやっても、リンクされるべき依存ライブラリが出て来ません。つまり、リンク
> がすっぽかされているようです。
> 
> 修正後についてはlddで調べるとちゃんとリンクされていることが分かります。
> 
> どうもgccのバージョンによってはこの症状があるようです。
> バグなのか仕様なのか分かりませんが、順番を変えるとリンクがされないという
> のはトラブルのもとですので、なんとかしてほしい気がいたします。
> 
> というわけなのですが、不具合の報告ありがとうございました。
> 


-- 
中岡 慎一郎 <s.nakaoka @ aist.go.jp>
産業技術総合研究所 知能システム研究部門
ヒューマノイド研究グループ
Phone: 029-861-5161  Fax: 029-862-6519


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