[openrtm-users 02666] MacOSXだとBasicDataTypeSkel.hのインクルードタイミングが悪い?

Yuki Suga ysuga @ ysuga.net
2012年 9月 21日 (金) 20:57:21 JST


OpenRTM-aist mlの皆様:
お世話になります.菅です.

このところ頻繁にアップデートを行ってるMacOSで
RTCが急にビルド出来なくなりました,
もしかしたらXcodeのアップデートが悪かったかもしれません.
iOS6も出たし,アップデートするか,なんて気になったのが悪かったようです.

Macは積極サポート外でしょうが,せめて対症療法だけ共有しましょう.
もし知識をお持ちの方がいらっしゃいましたら,ご意見いただけますか?

■環境
MacOSX Lion10.7.4 + Xcode4.4.1 (llvm-gcc-4.2.1)
OpenRTM-aist C++ 1.1.0 (本日,SVNソースツリーからDLしたもの)を,上記環境でビルドしインストール.
( ./configure --prefix=/usr/)

■症状:
MacOSX Lionでcmakeした後にmakeすると,以下のメッセージが出る.

asura:build ysuga$ make
[ 50%] Building CXX object src/CMakeFiles/myfirstrtc.dir/MyFirstRTC.cpp.o
In file included from
/Users/ysuga/Development/rtm/workspace/MyFirstRTC_cpp_2/src/MyFirstRTC.cpp:10:
In file included from
/Users/ysuga/Development/rtm/workspace/MyFirstRTC_cpp_2/include/MyFirstRTC/MyFirstRTC.h:13:
In file included from /usr/local/include/openrtm-1.1/rtm/Manager.h:33:
/usr/local/include/openrtm-1.1/rtm/Factory.h:94:5: warning: deleting
pointer to incomplete type 'RTC::RTObject_impl' may cause undefined
behaviour [-Wdelete-incomplete]
    delete rtc;
    ^      ~~~
/usr/local/include/openrtm-1.1/rtm/Factory.h:30:9: note: forward
declaration of 'RTC::RTObject_impl'
  class RTObject_impl;
        ^
In file included from
/Users/ysuga/Development/rtm/workspace/MyFirstRTC_cpp_2/src/MyFirstRTC.cpp:10:
In file included from
/Users/ysuga/Development/rtm/workspace/MyFirstRTC_cpp_2/include/MyFirstRTC/MyFirstRTC.h:16:
In file included from /usr/local/include/openrtm-1.1/rtm/DataInPort.h:23:
In file included from /usr/local/include/openrtm-1.1/rtm/InPort.h:32:
/usr/local/include/openrtm-1.1/rtm/Typename.h:126:15: error: no viable
overloaded '<<='
      any_var <<= tmp_var;
      ~~~~~~~ ^   ~~~~~~~
/usr/local/include/openrtm-1.1/rtm/Typename.h:234:52: note: in
instantiation of member function 'CORBA_Util::typecode<false,
RTC::TimedLong>::id' requested here
    return typecode<is_corba_object<T>::value, T>::id();
                                                   ^
/usr/local/include/openrtm-1.1/rtm/OutPort.h:137:27: note: in
instantiation of function template specialization
'CORBA_Util::toRepositoryId<RTC::TimedLong>' requested here
      : OutPortBase(name, ::CORBA_Util::toRepositoryId<DataType>()),
                          ^
/Users/ysuga/Development/rtm/workspace/MyFirstRTC_cpp_2/src/MyFirstRTC.cpp:38:5:
note: in instantiation of member function
'RTC::OutPort<RTC::TimedLong>::OutPort' requested here
    m_v_outOut("out", m_v_out)
    ^
/usr/local/include/omniORB4/CORBA_Any.h:80:8: note: candidate function
not viable: no known conversion from 'RTC::TimedLong' to 'cdrStream &'
for 1st argument;
  void operator<<= (cdrStream& s);
       ^
以下,延々とcandidate functionがならぶ

■考察
症状だけ見ると,
Typecode.hの中で,typecodeというクラスを使って,
typecodeの文字列を作ってると思います.
このとき,CORBA::Any型を使って,
テンプレートで渡されたタイプを,StructかObjectか判断し,
structならば,Any型に<<=オペレータで代入し,
Any型のメンバからtypecodeを取り出す,
という作業だったと思います.

この時,typecode::name()関数内で利用している
any_var <<= tmp_var;
の行でエラーが出てますから,
現在TimedDouble型を使っているので,
operator<<=(CORBA::Any& a, const TimedDouble& d)
という関数が見つからないのが原因だと思います.


■対処法(対処療法でっす)
そこで,BasicTypeSkel.hをインクルードするタイミングを変更しました.

□RTCBuilder生成直後
#include <rtm/Manager.h>
#include <rtm/DataFlowComponentBase.h>
#include <rtm/CorbaPort.h>
#include <rtm/DataInPort.h>
#include <rtm/DataOutPort.h>
#include <rtm/idl/BasicDataTypeSkel.h>
#include <rtm/idl/ExtendedDataTypesSkel.h>
#include <rtm/idl/InterfaceDataTypesSkel.h>

□修正後
#include <rtm/Manager.h>
#include <rtm/DataFlowComponentBase.h>

#include <rtm/idl/BasicDataTypeSkel.h> // これを順序移動
#include <rtm/idl/ExtendedDataTypesSkel.h> // これを順序移動
#include <rtm/idl/InterfaceDataTypesSkel.h> // これを順序移動

#include <rtm/CorbaPort.h>
#include <rtm/DataInPort.h>
#include <rtm/DataOutPort.h>

これでなぜかビルド出来るようになります.
修正前の順序の時に,BasicDataTypeSkel.hの該当部分が読み込まれないか,
と思ってmessageなどでデバッグしましたが,
どうも読み込まれているっぽいです.


■補足
この症状はLinuxだと出ませんでした.
LinuxはUbuntu 12.04です.同様にソースからビルドしました.



ではでは

-- 
///////////////////////////////////////////////////////////////////
// Yuki Suga, Ph.D.
// URL: http://www.ysuga.net/?lang=en
// E-mail: ysuga @ ysuga.net
///////////////////////////////////////////////////////////////////


More information about the openrtm-users mailing list