Project

General

Profile

#1915作業メモ

作成:片見
チケット1915( #1915 )の作業メモです。

OpenRTMのVC2010対応

作業概要
  1. GUI でビルド
  2. CUI でビルド
  3. sln、vcxproj、props、生成用pythonスクリプト作成
  4. Makefile の clean で vcxproj を消すようにすることを忘れないでね!
  5. 生成したzipファイルでビルド
  6. ソースコードの変更
  7. 動作確認
  8. 変更ファイル

GUI でビルド

Vc2010 から プロジェクトフィル、プロパティファイルが変更になったので、とりえず、GUIでビルドしてそれらのファイルを作成する。

問題

examples を実行するとエラーが発生する。

  • 現象
    インストール後、examples のコンポーネントを実行するとエラーが発生する。

  • 原因
    コンポーネントが RTC100d.dll を使用していたため。
    (depends.exe でコンポーネントが依存する dll を確認。)
    コンポーネントのリンクでは、RTC100.dll を使用するように指定していたが、rtm のリンクで作成される RTC100.def ファイルのライブラリ名を RTC100d としていた。
    そのため、コンポーネントの実行時に RTC100d.dll をロードしてしまていた。
  • 対策
    libRTC_vc10.vcxproj を修正して、RTC100.def ファイルのライブラリ名を RTC100 に変更した。

CUI でビルド

vc2010から msbuild に統一された。
オプションについては下記に url 参照。
http://blogs.msdn.com/b/vcblog/archive/2010/01/11/vcbuild-vs-c-msbuild-on-the-command-line.aspx

全構成をビルドすることはできないようなので、debug と release を別々にビルドを実施するように変更。

msbuild /M:2 /t:rebuild /p:configuration=debug OpenRTM-aist_vc10.sln
msbuild /M:2 /t:rebuild /p:configuration=release OpenRTM-aist_vc10.sln

sln、vcxproj、props、生成用pythonスクリプト作成

vcxprojtool.py 作成

ベースは vcprojtool.py 。
libcoil.vcproj.yaml などの yaml ファイルも変更が必要。(ConfigurationType の tool が vcproj と vcxproj で異なるため。)
vcxproj_template の %s の内容
libRTCSkel libcoil libRTC
1 ConfigurationType LIB DLL DLL EXE DLL
2 PreBuildEvent
3 ClCompile
4 Lib
5 PreLinkEvent
6 Link
7 PostBuildEvent

libRTCSkel_vc10.vcxproj の作業メモ

  • Import Project はセミコロン区切りで複数宣言してもOK? (解決)
    ビルドした結果、この書き方はNG。
       <Import Project="$(SolutionDir)$(SolutionDir)rtm_config.vsprops;$(SolutionDir)rtm_distbuild.vsprops" />
    
  • LinkIncremental Condition は不要?
  • Command はべた書きOK?(解決)
  • Key,Value でやったら問題回避
  • DebugInformationFormat バグ?(解決)
    yamlのミス修正して解決
  • Lib タグ ON/OFF
    とりえぜず、タグだけ存在して内容は空の状態。
    ビルドの問題がなければこのままで行く。
  • Link タグ ON/OFF
    とりえぜず、タグだけ存在して内容は空の状態
    ビルドの問題がなければこのままで行く。
  • PostBuildEvent は?(解決)
    バグ修正により解決

libcoil_vc10.vcxproj の作業メモ

libcoil_vc10.vcxproj を生成する vcxprojtool.py は./src/lib/coil/build/ に格納されいてるものを使用するの注意されたし!

  • LinkIncremental がfalse
  • PreBuildEvent に ClCompile の内容が入っている。(解決)
    バグ修正により解決
  • ClCompile の内容がおかいしい。
    yaml を修正。不足しているかもしれないがとりえあずこれで、行く。
  • Lib に PreLinkEvent の内容が入っている。(解決)
    バグ修正により解決

libRTC_vc10.vcxproj の作業メモ

  • vcxprojを生成するため、Makefile.amを修正したらビルドエラーでるようになってしまった。 (解決)
    slntool.py で guild が見つからずエラーになっている。vcxproj に対応していないためと思われる。
    後で直す。
  • PostBuildEvent の内容が空(解決)
    yaml を修正。

rtc.vcxproj の作業メモ

  • OutDir Condition の指定が違う
  • InDir Condition の指定が違う
  • PreBuildEvent が空(解決)
    yaml を修正。
  • ClCompileの内容(解決)
    yaml を修正。
  • Libが余計(解決)
    yaml を修正。
  • PreLinkEvent が余計(解決)
    yaml を修正。

rtcdll.vcxproj の作業メモ

  • OutDir Condition の指定が違う
  • InDir Condition の指定が違う

コンパイルオプション対応表

  • Optimization
    vc9 vc10
    0 Disabled
  • BasicRuntimeChecks
    vc9 vc10
    3 EnableFastChecks
  • RuntimeLibrary
    vc9 vc10
    2 MultiThreadedDLL
    3 MultiThreadedDebugDLL
  • PrecompiledHeader/UsePrecompiledHeader
    vc9 vc10
    0 NotUsing
  • WarningLevel
    vc9 vc10
    3 Level3
  • DebugInformationFormat
    vc9 vc10
    3 ProgramDatabase
    4 EditAndContinue

リンカオプション対応表

  • DebugInformationFormat
    vc9 vc10
    4 EditAndContinue
  • LINCREMENTAL
    vc9 vc10
    1 false
    2 true
  • SubSystem
    vc9 vc10
    1 Console
    2 Windows
  • TargetMachine
    vc9 vc10
    1 MachineX86
    2 MachineX86
  • EnableCOMDATFolding
    vc9 vc10
    2 true
  • OptimizeReferences
    vc9 vc10
    2 true
  • coilのtestsは後回しにする。

slntool.py の修正

  • GUIDが正確に取得できない。解決
  • Depned depファイルから読み込みでエラー 解決
    yaml.composer.ComposerError: found undefined alias 'libcoil'
      in "<string>", line 31, column 9:
              - *libcoil
                ^
    
    

    coilのvcxprojが巧くwin32へコピーされていない原因と思われる。
    ./win32/OpenRTM-aist/coil/Makefile.am
    ./OpenRTM-aist-1.0.0/win32/OpenRTM-aist/coil/Makefile.am

Makefile.am の修正

  • coil/tests は後回し。
  • vcxproj の削除

生成したzipでビルド

  • エラー 解決
    C:\cygwin\home\katami\work\ticket1915\OpenRTM-aist-1.0.0-win32\OpenRTM-aist>copy etc\rtm_config_omni414.props rtm_config.props
    指定されたファイルが見つかりません。

    C:\cygwin\home\katami\work\ticket1915\OpenRTM-aist-1.0.0-win32\OpenRTM-aist>copy etc\rtm_config_omni414.props examples\USBCamera\rtm_config.props
    指定されたファイルが見つかりません。

    C:\cygwin\home\katami\work\ticket1915\OpenRTM-aist-1.0.0-win32\OpenRTM-aist>copy coil_config.props examples\USBCamera\coil_config.props
    指定されたファイルが見つかりません。
  • エラー 解決
    4>c:\cygwin\home\katami\work\ticket1915\openrtm-aist-1.0.0-win32\openrtm-aist\examples\usbcamera\usbcameramonitor_vc10.vcxproj(34,4): error msb4019: インポートされたプロジェクト "c:\cygwin\home\katami\work\ticket1915\openrtm-aist-1.0.0-win32\openrtm-aist\user_config.props" が見つかりませんでした。<import> 宣言のパスが正しいかどうか、およびファイルがディスクに存在しているかどうかを確認してください。
  • エラー
    3>C:\Program Files\MSBuild\Microsoft.Cpp\v4.0\Platforms\Win32\Microsoft.Cpp.Win32.Targets(268,5): error : 要素 <SubSystem> の値 "2" は無効です。 [C:\cygwin\home\katami\work\ticket1915\OpenRTM-aist-1.0.0-win32\OpenRTM-aist\coil\libcoil_vc10.vcxproj]
    3>C:\Program Files\MSBuild\Microsoft.Cpp\v4.0\Platforms\Win32\Microsoft.Cpp.Win32.Targets(268,5): error : 要素 <TargetMachine> の値 "1" は無効です。 [C:\cygwin\home\katami\work\ticket1915\OpenRTM-aist-1.0.0-win32\OpenRTM-aist\coil\libcoil_vc10.vcxproj]
  • エラー
    2>C:\Program Files\MSBuild\Microsoft.Cpp\v4.0\Platforms\Win32\Microsoft.Cpp.Win32.Targets(147,5): error : 要素 <RuntimeLibrary> の値 "2" は無効です。 [C:\cygwin\home\katami\work\ticket1915\OpenRTM-aist-1.0.0-win32\OpenRTM-aist\rtm\idl\libRTCSkel_vc10.vcxproj]
    2>C:\Program Files\MSBuild\Microsoft.Cpp\v4.0\Platforms\Win32\Microsoft.Cpp.Win32.Targets(147,5): error : 要素 <WarningLevel> の値 "Lebel3" は無効です。 [C:\cygwin\home\katami\work\ticket1915\OpenRTM-aist-1.0.0-win32\OpenRTM-aist\rtm\idl\libRTCSkel_vc10.vcxproj]
  • エラー
    3>C:\Program Files\MSBuild\Microsoft.Cpp\v4.0\Microsoft.CppCommon.targets(113,5): error MSB3073: コマンド "copy "C:\cygwin\home\katami\work\ticket1915\OpenRTM-aist-1.0.0-win32\OpenRTM-aist\coil\Debug\\\libcoil.lib" "C:\cygwin\home\katami\work\ticket1915\OpenRTM-aist-1.0.0-win32\OpenRTM-aist\bin\\" [C:\cygwin\home\katami\work\ticket1915\OpenRTM-aist-1.0.0-win32\OpenRTM-aist\coil\libcoil_vc10.vcxproj]
    C:\Program Files\MSBuild\Microsoft.Cpp\v4.0\Microsoft.CppCommon.targets(113,5): error MSB3073: copy "C:\cygwin\home\katami\work\ticket1915\OpenRTM-aist-1.0.0-win32\OpenRTM-aist\coil\Debug\\\libcoil.dll" "C:\cygwin\home\katami\work\ticket1915\OpenRTM-aist-1.0.0-win32\OpenRTM-aist\bin\\" [C:\cygwin\home\katami\work\ticket1915\OpenRTM-aist-1.0.0-win32\OpenRTM-aist\coil\libcoil_vc10.vcxproj]

    C:\Program Files\MSBuild\Microsoft.Cpp\v4.0\Microsoft.CppCommon.targets(113,5): error MSB3073: [C:\cygwin\home\katami\work\ticket1915\OpenRTM-aist-1.0.0-win32\OpenRTM-aist\coil\libcoil_vc10.vcxproj]
    C:\Program Files\MSBuild\Microsoft.Cpp\v4.0\Microsoft.CppCommon.targets(113,5): error MSB3073: :VCEnd" はコード 1 で終了しました。 [C:\cygwin\home\katami\work\ticket1915\OpenRTM-aist-1.0.0-win32\OpenRTM-aist\coil\libcoil_vc10.vcxproj]
  • エラー
    26>C:\cygwin\home\katami\work\ticket1915\OpenRTM-aist-1.0.0-win32\OpenRTM-aist\rtm/CorbaPort.h(1228): error C2664: 'PortableServer::POA::servant_to_id' : 1 番目の引数を 'PortableServer::RefCountServantBase *' から 'PortableServer::Servant' に変換できません。(新しい機能 ; ヘルプを参照) [C:\cygwin\home\katami\work\ticket1915\OpenRTM-aist-1.0.0-win32\OpenRTM-aist\rtm\libRTC_vc10.vcxproj]
    指示された型は関連がありません。変換には reinterpret_cast、C スタイル キャストまたは関数スタイルのキャストが必要です。
    26>C:\cygwin\home\katami\work\ticket1915\OpenRTM-aist-1.0.0-win32\OpenRTM-aist\rtm/CorbaPort.h(1232): error C2664: 'PortableServer::POA::activate_object_with_id' : 2 番目の引数を 'PortableServer::RefCountServantBase *' から 'PortableServer::Servant' に変換できません。(新しい機能 ; ヘルプを参照) [C:\cygwin\home\katami\work\ticket1915\OpenRTM-aist-1.0.0-win32\OpenRTM-aist\rtm\libRTC_vc10.vcxproj]
  • エラー
    ManagerConfig.obj : error LNK2005: "char const * const openrtm_name" (?openrtm_name@3PBDB) は既に version.obj で定義されています。 [C:\cygwin\home\katami\work\ticket1915\OpenRTM-aist-1.0.0-win32\OpenRTM-aist\rtm\libRTC_vc10.vcxproj]
    ManagerConfig.obj : error LNK2005: "char const * const openrtm_version" (?openrtm_version
    @3PBDB) は既に version.obj で定義されています。 [C:\cygwin\home\katami\work\ticket1915\OpenRTM-aist-1.0.0-win32\OpenRTM-aist\rtm\libRTC_vc10.vcxproj]
    ManagerConfig.obj : error LNK2005: "char const * const corba_name" (?corba_name@@3PBDB) は既に version.obj で定義されています。 [C:\cygwin\home\katami\work\ticket1915\OpenRTM-aist-1.0.0-win32\OpenRTM-aist\rtm\libRTC_vc10.vcxproj]
    libRTC_vc10.vcxproj の version.h を コンパイルしているところが問題。以下の行を消すとうまくいく。
       <ItemGroup>
         <ClCompile Include="version.h" />
    

    filterを設定したのだが、まだ、巧くいっていない。設定ミスか?
       <ItemGroup>
         <Filter Include="Source Files">
             <UniqueIdentifier>{343CFD7E-3FDD-11E0-BD95-001C23DA0BDF}</UniqueIdentifier>
           <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
         </Filter>
     ・・・・・
       <ItemGroup>
         <ClCompile Include="version.h">
           <Filter>Source Files</Filter>
         </ClCompile>
    
  • ./win32/OpenRTM-aist/installer/OpenRTM-aist.wxs
    このファイルの <MergeRef Id="POLVCCRTx86.msm"/> を削除する必要あり。
    C:\cygwin\home\katami\work\ticket1915\OpenRTM-aist-1.0.0-win32\OpenRTM-aist\installer\OpenRTM-aist.wxs(13086) : error LGHT0094 : Unresolved reference to symbol 'WixMerge:POLVCCRTx86.msm' in section 'Product:{A3260F9A-456F-11E0-A90B-001C23DA0BDF}'.
    Microsoft (R) Windows Installer Xml Compiler version 3.5.1329.0
    Copyright (C) Microsoft Corporation. All rights reserved.
    
  • エラー
    C:\cygwin\home\katami\work\ticket1915\OpenRTM-aist-1.0.0-win32\OpenRTM-aist\installer\OpenRTM-aist.wxs(257) : error LGHT0103 : The system cannot find the file '..\\bin\\rtcd.exe'.
    C:\cygwin\home\katami\work\ticket1915\OpenRTM-aist-1.0.0-win32\OpenRTM-aist\installer\OpenRTM-aist.wxs(268) : error LGHT0103 : The system cannot find the file '..\\bin\\rtcprof.exe'.
    C:\cygwin\home\katami\work\ticket1915\OpenRTM-aist-1.0.0-win32\OpenRTM-aist\installer\OpenRTM-aist.wxs(289) : error LGHT0103 : The system cannot find the file '..\\rtm_config.vsprops'.
  • エラー
    C:\cygwin\home\katami\work\ticket1915\OpenRTM-aist-1.0.0-win32\OpenRTM-aist\installer\VC10msm_inc.wxs(5) : error LGHT0129 : Cannot open the merge module 'POLVCCRTx86.msm' from file 'C:\Program Files\Common Files\Merge Modules\policy_10_0_Microsoft_VC100_CRT_x86.msm'.
    ★Microsoft_VC100_CRT_x86.msm が見つからないので、削除しました。

ソースコードの変更

back_inserter のところで以下のエラーが発生するため、iterator をインクルードするように修正した。
修正したファイル。
  • ./rtm/InPortBase.cpp
  • ./rtm/OutPortBase.cpp
  • ./rtm/PeriodicECSharedComposite.cpp

動作確認

インストーラ

NameServer

examples

  • エラー

    RTC100.def がうまく作られていかったため。ファイルのライブラリ名がlibRTCになっていた。

変更ファイル

  • src/lib/rtm/OutPortBase.cpp
  • src/lib/rtm/InPortBase.cpp
  • src/lib/rtm/PeriodicECSharedComposite.cpp
  • src/lib/rtm/tests/ManagerServant/Makefile.am
  • src/lib/rtm/idl/Makefile.am
  • src/lib/rtm/Makefile.am
  • src/lib/coil/ace/Makefile.am
  • src/lib/coil/win32/coil/Makefile.am
  • src/lib/coil/win32/Makefile.am
  • src/lib/coil/tests/File/Makefile.am
  • src/lib/coil/tests/Logger/Makefile.am
  • src/lib/coil/tests/Timer/Makefile.am
  • src/lib/coil/tests/OS/Makefile.am
  • src/lib/coil/tests/PeriodicTask/Makefile.am
  • src/lib/coil/tests/Listener/Makefile.am
  • src/lib/coil/tests/Condition/Makefile.am
  • src/lib/coil/tests/TimeValue/Makefile.am
  • src/lib/coil/tests/Properties/Makefile.am
  • src/lib/coil/tests/Time/Makefile.am
  • src/lib/coil/tests/Guard/Makefile.am
  • src/lib/coil/tests/Mutex/Makefile.am
  • src/lib/coil/tests/Singleton/Makefile.am
  • src/lib/coil/tests/Task/Makefile.am
  • src/lib/coil/tests/stringutil/Makefile.am
  • src/lib/coil/tests/UUID/Makefile.am
  • src/lib/coil/tests/Factory/Makefile.am
  • src/lib/coil/tests/Makefile.am
  • src/lib/coil/tests/DynamicLib/Makefile.am
  • src/lib/coil/tests/Signal/Makefile.am
  • src/lib/doil/utils/omniidl_be/tests/OrganizationProxy/Makefile.am
  • src/lib/doil/utils/omniidl_be/tests/PortServiceProxy/Makefile.am
  • src/lib/doil/utils/omniidl_be/tests/ConfigurationProxy/Makefile.am
  • src/lib/doil/utils/omniidl_be/tests/ExecutionContextProxy/Makefile.am
  • src/lib/rtc/corba/idl/Makefile.am
  • utils/rtcprof/Makefile.am
  • utils/rtcd/Makefile.am
  • win32/OpenRTM-aist/coil/Makefile.am
  • win32/OpenRTM-aist/Makefile.am
  • win32/OpenRTM-aist/etc/Makefile.am
  • win32/OpenRTM-aist/examples/USBCamera/Makefile.am
  • examples/SeqIO/Makefile.am
  • examples/SimpleIO/Makefile.am
  • examples/Composite/Makefile.am
  • examples/ExtTrigger/Makefile.am
  • examples/ConfigSample/Makefile.am
  • examples/AutoTest/Makefile.am
  • examples/SimpleService/Makefile.am
  • win32/OpenRTM-aist/installer/OpenRTM-aist.wxs.in
  • build/slntool.py
  • src/lib/coil/build/slntool.py
  • src/lib/rtm/idl/libRTCSkel.vcproj.yaml
  • src/lib/rtm/libRTC.vcproj.yaml
  • src/lib/coil/win32/coil/libcoil.vcproj.yaml
  • utils/rtcprof/rtcprof.yaml
  • utils/rtcd/rtcd.yaml
  • examples/rtcdll.vcproj.yaml
  • examples/rtc.vcproj.yaml
  • src/lib/coil/build/vcxprojtool.py
  • src/lib/coil/win32/coil_distbuild.props
  • src/lib/coil/win32/coil_config.props
  • build/vcxprojtool.py
  • win32/OpenRTM-aist/autobuild_vc10.bat
  • win32/OpenRTM-aist/rtm_distbuild.props
  • win32/OpenRTM-aist/installer/VC10msm_inc.wxs
  • win32/OpenRTM-aist/etc/rtm_config_omni414.props
  • win32/OpenRTM-aist/examples/USBCamera/user_config.props
  • src/lib/rtm/SystemLogger.cpp
    #ifndef snprintf
    #define snprintf _snprintf
    #endif
    
    

??

rtm_config.prop で rtm_dllver

  • rtm_config.prop で rtm_dllver を記述しているが、configure.ac の AC_INIT(OpenRTM-aist, 1.1.0, , OpenRTM-aist)
    と同期をとる必要があるのか?


VC2010用OpenCV-RTC群