最初に試行錯誤していたとき(基本的に、上の記述は試行錯誤→整理してゼロからやり直したもの)、RTコンポーネントを起動したとき、
Unable to create an endpoint of this description: giop:tcp::0という表示が出て、動きませんでした。/etc/omniORB4.cfg で traceLevel=20にしたり、rtc.confに"logger.log_level: PARANOID"を設定してデバッグ情報を出力させたところ、なにかでローカルにつなぎにいったところで、こけていました。
最初は、mini2440にgcc/g++をいれて、ボード上でビルドを図ったのですが、gccが想定以上にリソース食いで、メモリ64Mで全然足りず、128Mのswapを有効にしてもSegmentationFaultその他で落ちるしまつ(バグだから連絡しろ、とか。メモリ確保のエラーチェックをしていないんじゃないのか?)。
最終的にクロスコンパイルすることになりました。
基本的な手順は、omniORB:CrossCompilingの手順によります。
注意点としては、Linuxのカーネルなどととは違い、その構築過程に
ディレクトリ:src/tool/omkdepend/ ファイル:def.h main.c parse.c すべての"getline"を"get_line"に変更する ※既存のgetlineライブラリ関数と干渉するため
ディレクトリ:mk/ ファイル:beforeauto.mk.in 修正:725〜730行目付近: CDEBUGFLAGS = -O CLINK = $(CC) CLINKOPTIONS = $(CDEBUGFLAGS) $(COPTIONS) -static CXXDEBUGFLAGS = -O CXXLINK = $(CXX) CXXLINKOPTIONS = $(CXXDEBUGFLAGS) $(CXXOPTIONS) -static修正の意味:-staticを追加することで、スタティックライブラリにする。 CDEUGFLAGSを-Oにするのはどこで見たか忘れた記述の真似。
$ mkdir build $ cd build $ ../configure CC=arm-linux-gcc CXX=arm-linux-g++ --host=arm-unknown-linux-gnu --build=i686-pc-linux-gnu --disable-ipv6 --with-omniORB-config=/etc/omniORB4.cfg --with-omniNames-logdir=/var/log/ --prefix=/usr 全部1行でここで、--hostと--buildの違いが重要とのこと。ちなみに、arm-とi686-のあとは、適当に./configureを走らせると見つかる。 参考ページの後で追加したもの。
$ make CC=gcc -C src/tool/omniidl/cxx/cccp $ make CXX=g++ -C src/tool/omniidl/cxx $ make CC=gcc -C src/tool/omkdependつぎに残りをARM用にビルドする。
$ make※すでに、omniidlはできているからそこはx86のまま残りがARMに。
$ rm -f lib/_omniidlmodule.so* lib/omnicpp $ make -C src/tool/omniidl/cxx clean $ make -C src/tool/omniidl/cxx $ makeとりあえずのディレクトリに仮インストールする(指定を間違うと大変なことになるので注意)。
$ mkdir どこか/inst $ make DESTDIR=/フルパス/inst/ install
このomniORBのビルドでの修正点の一つ、-staticは主に、クロスビルドのための環境と、mini2440に入っているダイナミックリンクのライブラリのミスマッチの解消が目的です。ライブラリのパスをいじったりもしてみましたが、解消せず、手っ取り早い方法として、スタティックリンクにしました。
もし、クロスコンパイルで、ld.so 系の問題が生じた場合は、バイナリサイズや実行時のメモリ上でのサイズが大きくなる弊害はありますが、スタティックリンクにすると多分、ライブラリを一緒にもっていったりするなどの手間がいらなくなると思います。
で、結局、mini2440上でのビルドを試みたり、クロスであれこれするのに、わりと手間をかけたのですが(主にはmini2440が遅いため)、結論は「lo」がない、でしたorz。ので、実際にこれでビルドしたomniORBは使わず、apt-getしたもので動いています。