[openrtm-users 02577] Re: Fedora17(32bit)上でのOpenRTM(C++)コンパイル

Masayuki Shimizu masayuki.shimizu @ aist.go.jp
2012年 6月 8日 (金) 00:33:09 JST


安藤様

清水です。

標記の件、少し調べてみました。
問題は解決しませんでしたが、以下分かったことです。

(1) Fedora17でomniORBをコンパイル
-march=i386オプションを付けて、omniORBをソースからコンパイルしてみました。
結果、問題なくコンパイルできました。
作成されたバイナリをreadelfで見てみましたが、
__atomic_fetch_add_4 という参照はありませんでした。
どうやら、CORBAの問題では無さそうです。

(2) Ubuntu12.04でOpenRTM-1.1.0をコンパイル
-march=i386オプションを付けて、RTM1.1.0をソースからコンパイルしてみました。
g++のバージョンは、4.6.3です。
結果、以下のエラーでコンパイルできませんでした。

../../src/lib/rtm/.libs/libRTC.so: undefined reference to `__sync_fetch_and_add_4'

(3) __sync_fetch_and_add_4 のエラー原因の検索
上記のエラーメッセージをググってみました。
すると、いろいろな情報が見つかりました。

__sync_fetch_and_add_4 がlegacyなインタフェースで、
C++では、std::atomic<>に置き換わったので、
__sync_fetch_and_add_4 を使わないようにソースを
書き換えれば良いという情報がありました。

上記が正しいとすれば、__atomic_fetch_add_4 もおそらく同じだと思います。

また、簡単な回避法としては、-march=i486 以上をオプションに指定すれば良い
との情報もありました。
i386だけダメなようです。


ところで、根本的な疑問として、RTMではatomic関係のインタフェースを
どこで使っているのでしょう?
src/lib/rtm以下のすべての *.oファイルに __atomic_fetch_add_4 への
参照が含まれてしまっています。

以上、全然すっきりしませんが、わかった事です。
さらなる情報をご存知の方は教えて頂けると幸いです。

清水
--- On Thu, 2012/6/7, Ando Noriaki <n-ando @ aist.go.jp> wrote:

> 清水先生
> 
> 安藤です
> 
> 情報有り難うございます。
> 結論としては、コンパイルは通しましたが、原因はよくわかりませんでした(笑
> 一応もう少しで、1.1.0-RELEASEのFedora用rpmをリリースできる見込みです。
> 
> 
> #以下は、gcc 4.7, rpmパッケージ作成に興味のある方向け
> 
> Fedora17のgcc (4.7) では、-march=i386 オプションを付けて
> コンパイルすると、ある種の条件下(詳しくは調べてませんが)で
> __atomic_fetch_add_4 という関数(おそらくgccの組み込み関数)
> への呼び出しが暗黙的に追加されるようです。
> #オプションが -march=i468 i586 i686 だと追加されない。
> 
> しかしながら、色々探した限りでは__atomic_fetch_add_4
> 関数の宣言や実体が無いのと、Fedora14,15,16で作成した
> libRTCやlibcoilにはそういうシンボルが一切見当たらないので、
> まぁ、なくても問題ないだろうと考えました。(あったらすみません。)
> 
> -march=i386オプションは、自分でソースからconfigure;makeする
> 時にはコンパイルオプションとして追加されないのですが、
> rpmパッケージを作るためにrpmbuildを使うと、CFLAGS/CXXFLAGSに
> ↓のように勝手に追加されてしまいます。
> 
> CFLAGS=-O2 -g -march=i386 -mtune=i686
> (これはFC14,15,16でも同様、でも問題は起こらない。)
> 
> ただし、x86_64版のrpmbuildは
> 
> CFLAGS=-O2 -g
> 
> というオプションのみです。なので、specファイルを少し書き換えて、
> i386版も-O2 -gオプションのみになるように強制したところ、
> 一応パッケージの作成まで出来ました。
> 
> なんかすっきりしませんが、gcc 4.7 が主流になってくれば
> 何かわかるかもしれません。
> 
> 
> 他に情報お持ちの方がおられましたら、教えてもらえませんか?
> よろしくお願いします。
> 
> 
> 
> 
> 2012年6月7日 18:41 Masayuki Shimizu <masayuki.shimizu @ aist.go.jp>:
> > 安藤様
> >
> > 静岡大の清水です。
> >
> > Fedora17 for i386で私の所ではコンパイルは成功しています。
> >
> > インストール時に開発デスクトップ(だったかな?)を選択したので、
> > 開発環境が最初からインストールされているものを使っています。
> >
> > 何か開発系のパッケージが足りないのではないでしょうか?
> >
> > 参考までに、私のマシンにインストールされている
> > パッケージリストを添付しておきます。
> >
> > 清水
> >
> > --- On Thu, 2012/6/7, Ando Noriaki <n-ando @ aist.go.jp> wrote:
> >
> >> OpenRTM ML皆様
> >>
> >> 産総研 安藤です
> >>
> >> どなたかFedora17 (32bit) 上で OpenRTM-aistのC++版の
> >> コンパイルを通したことがある方はいらっしゃいませんか?
> >>
> >> 実行形式にリンクする際に、軒並み以下のようなエラーがでて
> >> 困っております。64bit版では出ていないみたいです。
> >> ../../src/lib/rtm/.libs/libRTC.so: undefined reference to `__atomic_fetch_add_4'
> >> collect2: error: ld returned 1 exit status
> >>
> >> g++: gcc version 4.7.0 20120507 (Red Hat 4.7.0-5) (GCC)
> >> OS: Fedora17, 32bit
> >> OpenRTM: OpenRTM-aist-1.1.0-RELEASE
> >>
> >> --
> >> 安藤慶昭@独立行政法人産業技術総合研究所 知能システム研究部門
> >>     統合知能研究グループ 主任研究員, 博士(工学)
> >>     〒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
> >> _______________________________________________
> >> openrtm-users mailing list
> >> openrtm-users @ openrtm.org
> >> http://www.openrtm.org/mailman/listinfo/openrtm-users
> >>
> > _______________________________________________
> > openrtm-users mailing list
> > openrtm-users @ openrtm.org
> > http://www.openrtm.org/mailman/listinfo/openrtm-users
> >
> _______________________________________________
> openrtm-users mailing list
> openrtm-users @ openrtm.org
> http://www.openrtm.org/mailman/listinfo/openrtm-users
> 


More information about the openrtm-users mailing list