[openrtm-users 01080] Re: case sensitive file name in OpenRTM-aist svn

Yosuke Matsusaka yosuke.matsusaka @ aist.go.jp
2010年 1月 18日 (月) 18:19:02 JST


安藤さん

松坂です。

下記の対処で無事にコンパイルできるようになりました。ありがとうございました。
細かい動作確認はこれからですが、現時点のパッチを送っておきます。
#余分なコードがついてしまうので、trunkにマージするかどうかの判断はお任せします。

2010/1/18 Ando Noriaki <n-ando @ aist.go.jp>:
> 松坂さん
>
> 安藤です
>
> ちなみに、duplicate symbolで怒られるのはInPortConsumerのみですか?
> でしたら、試しに、InPortConsumer.h の最後の
>
> template class ::coil::GlobalFactory<RTC::InPortConsumer>;
>
> を削ってみてもらえないでしょうか?
>
> もしこれで、リンク時に、undefined reference が出るようでしたら、
>
> template class ::coil::GlobalFactory<CdrBufferBase> CdrBufferFactory;
> template class ::coil::GlobalFactory<InPortConsumer> InPortConsumerFactory;
> template class ::coil::GlobalFactory<InPortProvider> InPortProviderFactory;
> template class ::coil::GlobalFactory<OutPortConsumer> OutPortConsumerFactory;
> template class ::coil::GlobalFactory<OutPortProvider> OutPortProviderFactory;
> template class ::coil::GlobalFactory<coil::PeriodicTaskBase>
> PeriodicTaskFactory;
> template class ::coil::GlobalFactory<PublisherBase> PublisherFactory;
>
> を FactoryInit.cpp の適当場場所においてみてください。
>
>
>
> 2010年1月18日14:40 Yosuke Matsusaka <yosuke.matsusaka @ aist.go.jp>:
>> 安藤さん
>>
>> 松坂です。
>>
>> 下記の件、対処法はまだわかっていないのですが、原因はわかりました。
>> 以下の説明によると
>> http://gcc.gnu.org/onlinedocs/gcc/Template-Instantiation.html
>> g++のtemplateの自動的な実体化&配置は、ELFシステム or Windowsでのみ有効
>> という制限があるようです。
>> 一番簡単な対処法は"-frepo"フラグを付けることのようですが、ライブラリの場合で
>> 今回のように衝突が起こっている場合は手動で解決する必要があるようです。
>> -fno-implicit-templatesを使う方法も試してみたのですが、今度はexplicitに生成しなけ
>> ればならないオブジェクトが大量に出てしまいました。
>>
>> マイナーなプラットフォームを使っているとこういう時に対処に困ります。
>> どうしたものやら、、、。
>>
>> 2010/1/14 Yosuke Matsusaka <yosuke.matsusaka @ aist.go.jp>:
>>> 安藤さん
>>>
>>> 松坂です。
>>>
>>> 2010/1/14 Ando Noriaki <n-ando @ aist.go.jp>:
>>>> これは、以下のgccのバグでしょうかね。
>>>> http://d.hatena.ne.jp/dollyva/20080115/p1
>>>> gccとglibcのバージョンはいくつでしょうか?
>>>>
>>>> いくつかのヘッダで、coil::GlobalFactory を実体化しています。
>>>> template class ::coil::GlobalFactory<RTC::InPortConsumer>;
>>>>
>>>> 普通は、weakシンボルとして定義されていて、リンカがよきに計らってくれる
>>>> ので、問題が出ないはずなのですが、いくつかのバージョンのgccでは
>>>> 怒られるみたいです。
>>>>
>>>> .oファイルをnmした結果はどうなってるでしょうか?
>>>
>>> $ nm Factory.o | grep Global
>>> 0000000000000270 T
>>> __ZN4coil13GlobalFactoryIN3RTC14InPortConsumerESsSt4lessISsEPFPS2_vEPFvRS5_EEC1Ev
>>> 0000000000000f10 S
>>> __ZN4coil13GlobalFactoryIN3RTC14InPortConsumerESsSt4lessISsEPFPS2_vEPFvRS5_EEC1Ev.eh
>>> 0000000000000020 T
>>> __ZN4coil13GlobalFactoryIN3RTC14InPortConsumerESsSt4lessISsEPFPS2_vEPFvRS5_EEC2Ev
>>> 0000000000000b38 S
>>> __ZN4coil13GlobalFactoryIN3RTC14InPortConsumerESsSt4lessISsEPFPS2_vEPFvRS5_EEC2Ev.eh
>>> 00000000000002c0 T
>>> __ZN4coil13GlobalFactoryIN3RTC14InPortConsumerESsSt4lessISsEPFPS2_vEPFvRS5_EED1Ev
>>> 0000000000000fc0 S
>>> __ZN4coil13GlobalFactoryIN3RTC14InPortConsumerESsSt4lessISsEPFPS2_vEPFvRS5_EED1Ev.eh
>>> 00000000000002a0 T
>>> __ZN4coil13GlobalFactoryIN3RTC14InPortConsumerESsSt4lessISsEPFPS2_vEPFvRS5_EED2Ev
>>> 0000000000000f88 S
>>> __ZN4coil13GlobalFactoryIN3RTC14InPortConsumerESsSt4lessISsEPFPS2_vEPFvRS5_EED2Ev.eh
>>> $ nm FactoryInit.o | grep Global
>>> 0000000000000110 T
>>> __ZN4coil13GlobalFactoryIN3RTC14InPortConsumerESsSt4lessISsEPFPS2_vEPFvRS5_EEC1Ev
>>> 00000000000005d8 S
>>> __ZN4coil13GlobalFactoryIN3RTC14InPortConsumerESsSt4lessISsEPFPS2_vEPFvRS5_EEC1Ev.eh
>>> 0000000000000000 T
>>> __ZN4coil13GlobalFactoryIN3RTC14InPortConsumerESsSt4lessISsEPFPS2_vEPFvRS5_EEC2Ev
>>> 00000000000003a0 S
>>> __ZN4coil13GlobalFactoryIN3RTC14InPortConsumerESsSt4lessISsEPFPS2_vEPFvRS5_EEC2Ev.eh
>>> 0000000000000140 T
>>> __ZN4coil13GlobalFactoryIN3RTC14InPortConsumerESsSt4lessISsEPFPS2_vEPFvRS5_EED1Ev
>>> 0000000000000610 S
>>> __ZN4coil13GlobalFactoryIN3RTC14InPortConsumerESsSt4lessISsEPFPS2_vEPFvRS5_EED1Ev.eh
>>> 00000000000000b0 T
>>> __ZN4coil13GlobalFactoryIN3RTC14InPortConsumerESsSt4lessISsEPFPS2_vEPFvRS5_EED2Ev
>>> 0000000000000568 S
>>> __ZN4coil13GlobalFactoryIN3RTC14InPortConsumerESsSt4lessISsEPFPS2_vEPFvRS5_EED2Ev.eh
>>>
>>> となっていました。安藤さんのご推察の通りTがずらずらと出てしまっていますね、、、。
>>>
>>> gccのバージョンについては、
>>>
>>> $ g++ -v
>>> Using built-in specs.
>>> Target: i686-apple-darwin10
>>> Configured with: /var/tmp/gcc/gcc-5646.1~2/src/configure
>>> --disable-checking --enable-werror --prefix=/usr --mandir=/share/man
>>> --enable-languages=c,objc,c++,obj-c++
>>> --program-transform-name=/^[cg][^.-]*$/s/$/-4.2/
>>> --with-slibdir=/usr/lib --build=i686-apple-darwin10
>>> --with-gxx-include-dir=/include/c++/4.2.1
>>> --program-prefix=i686-apple-darwin10- --host=x86_64-apple-darwin10
>>> --target=i686-apple-darwin10
>>> Thread model: posix
>>> gcc version 4.2.1 (Apple Inc. build 5646) (dot 1)
>>>
>>> ということでアップル製のgccを使っていました(libcについては同じくアップル製のようでバージョンはわからず)。
>>>
>>> 今確認したところmacportsの中にGNU製のgcc(紹介いただいたURLにあるパッチが当たったものだと思います)
>>> があったのでそちらでコンパイルを試してみます。
>>>
>>> --
>>> Yosuke Matsusaka, Ph.D  <yosuke.matsusaka @ aist.go.jp>
>>>  Interaction Modeling Group /
>>>  National Institute of Advanced Industrial Science and Technology (AIST)
>>>  Tel: 029-862-6726  Web: http://staff.aist.go.jp/yosuke.matsusaka/
>>>
>>
>
>
>
> --
> 安藤慶昭@独立行政法人産業技術総合研究所 知能システム研究部門
>    統合知能研究グループ 主任研究員, 博士(工学)
>    〒305-8568 つくば市梅園1-1-1 中央第2
>    e-mail: n-ando @ aist.go.jp, web: http://staff.aist.go.jp/n-ando
>    OpenRTM-aist: http://www.openrtm.org
>
> Noriaki Ando, Ph.D.
>    Senior Research Scientist, RT-Synthesis R.G., ISRI, AIST
>    AIST Tsukuba Central 2, Tsukuba, Ibaraki 305-8568 JAPAN
>    e-mail: n-ando @ aist.go.jp, web: http://staff.aist.go.jp/n-ando
>    OpenRTM-aist: http://www.openrtm.org
>
-------------- next part --------------
テキスト形式以外の添付ファイルを保管しました...
ファイル名: osx-patch2-r1685.diff
型:         application/octet-stream
サイズ:     2880 バイト
説明:       無し
URL:        <http://www.openrtm.org/pipermail/openrtm-users/attachments/20100118/08c894bd/attachment-0001.obj>


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