Visual Studio インストール時に、C++コンパイラを含む Visual C++ がインストールされていない場合があります。
対応方法:
Visual C++ をインストールします
再度インストーラーを(手元にすでになければダウンロードしてから)起動し、「変更」からインストールを行います。 インストールをカスタマイズするを選択して、インストール対象に Visual C++ が含まれていることを確認してからインストールを行います。
この原因の場合も、CMakeError.log の出力内容は(原因1)と同じです。
(原因3) rc.exe が実行できない
まれに、インストールされているコンパイラを CMake 実行時に正しく指定しているのにもかかわらず、No CMAKE_CXX_COMPILER could be found. のようなエラーが発生することがあります。 原因の一つとして、複数のバージョンの Visual Studio をインストール・アンインストール等を行った際に、まれにツールチェーンの設定に不整合が生じ、以下のようなエラー rc.exeが実行できない が発生することがあります。
Microsoft Platform SDK をインストールする。その際は、こちらを参考にしてください。あるいは、次の2.にしたがってください。
2.インクルードファイルパス・ライブラリパスの設定不備
対応方法:
インストールをする順序などの関係で、Visual C++ 2005 Express Edition のインストールディレクトリとは違う場所に Microsoft Platform SDK がインストールされてしまうなどの事情で、Visual C++ 2005 Express Edition のコンパイラが Microsoft Platform SDK のインクルードファイルやライブラリをたぐれなくなっている場合があります。この場合は、インクルードファイルサーチパスやライブラリサーチパスに Microsoft Platform SDK のインストールディレクトリを追加することで問題を解決できます。
Can't open file: ./rtc.conf
Can't open file: /etc/rtc.conf
Can't open file: /etc/rtc/rtc.conf
Can't open file: /usr/local/etc/rtc.conf
Can't open file: /usr/local/etc/rtc/rtc.conf
OpenRTM-aist (C++版、Python版、Java版)に関するトラブルシューティングをまとめました。
OpenRTM-aist (共通)
OS 共通
コンポーネントは起動しているはずなのにゾンビオブジェクトとして表示される。
コンポーネントは起動しており、ネームサーバーにも登録されているのに、RTSystemEditor のネームサービスビュー上ではゾンビオブジェクトとして表示されており、システムエディタにドラッグアンドドロップしても何も表示されない。[原因]コンポーネントを起動したホストに到達できない
RTSystemEditor が動作しているPCからコンポーネントを起動したホストに何らかの理由で到達できていない可能性があります。まず、RTSystemEditor が動作しているPCからコンポーネントを起動したホストに対して ping が通るか確認してください。
例えば、以下の3台のホストA、B、Cがあるとします。
- hostA: コンポーネントが動いているホスト
- hostB: ネームサーバーが動いているホスト
- hostC: RTSystemEditor が動いているホスト
これらのホストのネットワークが以下のような構成になっており、[hostA]-(ネットワークI)-[hostB]-(ネットワークI)-[hostC]
かつhostBがネットワークIとネットワークII間を適切にルーティングするように設定されていなければ、hostC から hostAへは到達できません。
こういった場合は、hostB を適切に設定してhostC から hostAへ到達できるようにする必要があります。
[原因]コンポーネントを起動したホストでファイアウォールが有効になっている
コンポーネントが動作しているホストでファイアウォールが動作している場合、RTSystemEditor とコンポーネントが通信できずにこうした現象が発生する場合があります。ファイアウォールの設定を見直すかOFFにするなどして、外部からコンポーネントに通信できるようにしてください。
Windows
インストーラー実行中に「…特権が不足しています。」などと表示されて、インストールが続行できない
コンポーネントがネームサービスに登録されない。
ネームサーバー、コンポーネントを起動後、RTSystemEditor などでネームサーバーに接続し、コンポーネントが登録されていない場合があります。このような場合は、
まずは、ログレベルを最高にするため rtc.conf に
コンポーネントのログに
このような場合、以下の原因が考えられます。
rtc.conf の corba.nameservers が正しく設定されていない
コンポーネントが読み込む rtc.conf が正しく設定されているかどうか確認してください。利用しようとするネームサーバーを openrtm.aist.go.jp というホスト名と仮定すると、以下の行が rtc.conf に含まれていなければなりません。
また、ネームサーバーをポート番号を指定して起動した場合には、ポート番号も指定する必要があります。ネームサーバー起動時に指定したポート番号が1234番の場合、以下のように設定する必要があります。
コンポーネント起動したホストからネームサーバーを起動したホストへネットワーク接続ができない
コンポーネントを起動したホストからネームサーバーを起動したホストへネットワーク接続ができるか確認してください。まずは、ping が通るかどうか確認します。もし通らなければネットワークの設定を見直してください。
ping が通っても、ファイアウォールなどで接続が禁止されている可能性があります。まず、ネームサーバーを起動したホスト側のファイアウォールの設定を見直してください。一番簡単な方法は、ファイアウォールをOFFにすることです。方法は各OSやファイアウォールの設定方法を参照してください。
ネットワークインターフェースが2つ以上ある
ホストにネットワークインターフェースが2つ以上ある場合、CORBA にどちらのインターフェースを使用するか教えてやる必要があります。
これは、ネームサーバー側、コンポーネント側両者ともに考慮しなければなりません。
仮にそれぞれのホストが2つずつインターフェースを持っているとして、各インターフェースのアドレスが以下のように設定されているとします(maskは255.255.255.0と仮定)。
ネームサーバーhost: eth0:192.168.0.1, eth1:192.168.100.1
コンポーネントhost: eth0:192.168.0.2, eth1:192.168.11.96
この場合、ネームサーバーhostとコンポーネントhostは 192.168.0 のネットワークで接続されているはずです。
従って、
ネームサーバーには eth0:192.168.0.1
コンポーネントには eth0:192.168.0.2
のインターフェースを使うように教えてあげる必要があります。
ネームサーバー側では、ネームサーバーを起動する際に OMNIORB_USEHOSTNAME という環境変数を設定する必要があります。
直接、rtm-naming (UNIX系) もしくは rtm-naming.bat (Windows) に書き込んでも良いでしょう。
一方、コンポーネント側は rtc.confにcorba.endpoint の設定を記述することで、使用するインターフェースを指定することができます。
OpenRTM-aist (C++版)
Windows
&aname(cmakecompilererrro)CMake 実行時にコンパイラが見つからない
CMake 実行時に以下のエラーが発生する。
まずは、<プロジェクトディレクトリ>/<buildディレクトリ>/CMakeFiles/CMakeError.log
を確認してください。
(原因1) 間違ったコンパイラを指定した
CMake を実行 (Configure) する際に、コンパイラをしてします。インストールされている Visual Studio とは異なるコンパイラを指定した場合には、コンパイラが見つからず、No CMAKE_CXX_COMPILER could be found. のようなエラーが発生します。
CMakeError.log を見ると、以下のように、コンパイラチェック開始直後にエラーが発生します。
(原因2) Visual C++がインストールされていない
Visual Studio インストール時に、C++コンパイラを含む Visual C++ がインストールされていない場合があります。
再度インストーラーを(手元にすでになければダウンロードしてから)起動し、「変更」からインストールを行います。 インストールをカスタマイズするを選択して、インストール対象に Visual C++ が含まれていることを確認してからインストールを行います。
この原因の場合も、CMakeError.log の出力内容は(原因1)と同じです。
(原因3) rc.exe が実行できない
まれに、インストールされているコンパイラを CMake 実行時に正しく指定しているのにもかかわらず、No CMAKE_CXX_COMPILER could be found. のようなエラーが発生することがあります。 原因の一つとして、複数のバージョンの Visual Studio をインストール・アンインストール等を行った際に、まれにツールチェーンの設定に不整合が生じ、以下のようなエラー rc.exeが実行できない が発生することがあります。
これに対する対処方法としては、rc.exe と rcdll.dll を対象コンパイラのツールディレクトリにコピーする方法があります。
アプリケーションエラー「アプリケーションを正しく初期化できませんでした。…」
OpenRTM-aist (C++版)には、VC8(VS2005)ベースのものと、VC9(VS2008)ベースのものがあります。OpenRTM-aist-X.X.X-jp_vc8.msi(X.X.Xはバージョンです。)などのVC8ベースのインストーラーを使用した場合はMicrosoft Visual C++ 2005 SP1 再頒布可能パッケージ (x86) を、OpenRTM-aist-X.X.X-jp_vc9.msi(X.X.Xはバージョンです。)などのVC9ベースのインストーラーを使用した場合はMicrosoft Visual C++ 2008 再頒布可能パッケージ (x86) をインストールしてください。
「このアプリケーションの構成が正しくないため、アプリケーションを開始できませんでした。…」
OpenRTM-aist (C++版)には、VC8(VS2005)ベースのものと、VC9(VS2008)ベースのものがあります。OpenRTM-aist-X.X.X-jp_vc8.msi(X.X.Xはバージョンです。)などのVC8ベースのインストーラーを使用した場合はMicrosoft Visual C++ 2005 SP1 再頒布可能パッケージ (x86) を、OpenRTM-aist-X.X.X-jp_vc9.msi(X.X.Xはバージョンです。)などのVC9ベースのインストーラーを使用した場合はMicrosoft Visual C++ 2008 再頒布可能パッケージ (x86) をインストールしてください。
Visual C++ 2005 Express Edition でビルド時に「'windows.h'が見つからない」というエラー
Visual C++ 2005 Express Edition でビルド時に次のようなエラーが出る場合があります。
1.Microsoft Platform SDK がインストールがされていない
2.インクルードファイルパス・ライブラリパスの設定不備
右上のプルダウンメニュー「ディレクトリを表示するプロジェクト」を「インクルード ファイル」として、Microsoft Platform SDK のインクルードファイルのディレクトリ(例えば、「C:\Program Files\Microsoft Platform SDK\Include」)をインクルードファイルのサーチパスに追加します。
rtm-naming の実行でエラー発生
症状: rtm-naming.bat を実行するとアプリケーションエラーが発生する。VC++関係のライブラリがインストールされていない可能性が考えられます。
VC++関係のライブラリがインストールされていない
Visual Studio 2005 等のアプリケーションがインストールされていない場合は、ここVisual Studio 2005 Express Editionから"Visual C++ 2005 Express Edition"のインストールを行ってください。rtm-naming が実行できない
症状:rtm-naming.bat を実行しても黒い窓(コマンドプロンプト画面)が一瞬開いて閉じてしまう。[原因]omniORB がインストールされていない
rtm-naming.bat 内では通常 omniORB のネームサーバーomniNames.exeを実行します。omniORB がインストールされていないとomniNames.exeもインストールされないので、ネームサーバーを実行できません。
ダウンロードページから omniORB をダウンロードしインストールしてください。
[原因]log ディレクトリのパス中に2バイト文字が含まれている
rtm-naming.bat 内では通常 omniORB のネームサーバーomniNames.exeを以下のように実行します。
通常環境変数 %TEMP% はユーザーのテンポラリディレクトリ
対応策としては、以下の3つが考えられます。
パスに日本語を含まないログディレクトリは自分に書き込みの権限があるディレクトリで、安全な場所にしてください。たとえば、C:\tmp など。
このネームサーバーには、omniNames のような日本語のパスの問題は存在しないので、これを使用することでユーザー名が日本語でも、ネームサーバーを起動できます。
Unix
パッケージの自動インストールでダウンロードエラーが出る。
ネットワーク接続が正常でもダウンロードエラーが出る場合、回線の混雑等でウンロードに失敗した場合と、ダウンロードサイト側でファイルの場所や名前が変わった可能性が考えられます。前者の場合は時間帯等をずらして再度自動インストーラーを実行してみてください。また後者の場合には、該当するパッケージを探してから個々にダウンロードして手動インストールするか、自動インストーラーのダウンロード元アドレスを修正してから改めて起動してください。
なお、ダウンロードサイト側の変更があった場合、変更情報を当方までご連絡いただければ幸いですので、ご協力をお願いします。
configure を実行したがエラーが出て終了する。
make を実行してもビルドが完了しない。または make の実行エラーが出る。
OpenRTM-aist のインストールに失敗する
古いバージョンの OpenRTM-aist が完全にアンインストールされていない場合、新しいバージョンのインストールができません。古いバージョンを一度アンインストールしてから、再度インストール作業をします。Vine・Fedora・ubuntu・debian共通:
pkg_install_XXXX.sh を利用してアンインストールする。
Vine:
apt-getコマンドでアンインストールする。次の手順でアンインストールを行ってください。Fedora:
yumコマンドでアンインストールする。次の手順でアンインストールを行ってください。ubuntu/debian:
apt-getコマンドでアンインストールする。次の手順でアンインストールを行ってください。apt-get などを使用してインストール作業を行うときに CD を要求される
Ubuntu、Debian などのディストリビューションで、apt-get や pkg_install_ubuntu.sh, pkg_install_debian.sh を使用してインストール作業をしていると、次のように CD を求められることがあります。 メディア変更:
もちろん、CD を用意すればよいことなのですが、諸事情により用意できない場合の対処方法を記述します。
この場合はとりあえず、C-c(Ctrl+c) を入力してインストール作業を中断し、以下の手順でインストール作業をやり直してください。
1./etc/apt/sources.list の編集をする
/etc/apt/sources.list の冒頭部分に
あるいは
というような行がありますので、該当する行頭に # 文字を挿入し、コメントアウトしてください。
又は、
2.インストール作業をやり直す
先ほど中断したインストール作業を始めからやり直してください。サンプルプログラムの SimpleIO を実行する run.sh が実行できない
サンプルプログラム SimpleIO を起動したが、正常に動かない。
SimpleIO の実行スクリプト run.sh では、ターミナルウィンドウを kterm,xterm,gnome-terminal のいずれかに仮定しております。このため、これ以外のターミナルウィンドウを使用している場合は、run.sh を適宜書き換えてから実行してください。OpenRTM-aist (Python版)
Windows
rtm-naming.py を実行したら、omniNames が"usage:"を表示して終了してしまう
症状
rtm-naming.pyを"C:\Documents and Settings\Hoge\My Documents"等ディレクトリ名に空白が入っているディレクトリから実行した場合、omniNamesは"usage:"を表示して終了してしまいます。対処方法
これは、rtm-naming.py のバグによるものです。上記の症状がでた場合、下記のどちらかの方法で対処してください。python.exeが起動しない
Cygwin をインストールしている環境では python.exe が複数存在する場合がある
Python2.6 + omniORBpy-3.4 で omniORB のインポート時に"ImportError: DLL load failed"エラーが発生する。
「MSVCP71.dll が見つからなかったため、…」というエラーで終了する
「Can't open file: ./rtc.conf」などと表示される。
コンポーネントがネームサービスに登録されない
以下のコマンドにて rtc.conf の確認を行い、CRLF という文字列が表示された場合、新たに rtc.conf の作成を行ってください。
OpenRTM-aist (Java版)
OS 共通
Java版コンポーネントでデータ転送に時間がかかる
Java版の RTコンポーネントと C++版など他の言語のコンポーネントとの間で、特に大きなデータ(100kB以上でみられることが多い。)を送受信する場合に、極端に速度が低下する場合があります。これは Java の CORBA 側の問題であることが知られており、タイムアウトを適切に設定することにより回避することができます。Java版の RTC が読み込む rtc.conf に以下のように記述することで、Java の CORBA のタイムアウトを設定します。
大きなデータの場合、1回の read でデータが読み切れないので、通常何回か read を行います。
次のデータはすぐには来ませんので、read は読み込みバイト数を 0byte として戻りますが、通常1ms以内には次のデータはやってきます。デフォルトの設定だと Read Thread が100ms待たされますが、そんなに長時間待つ必要はなく1ms程度待てば、すぐに次のデータを読み込むことができます。
デフォルト設定の場合、100ms待って、さらにもう一度読み込み read が0を返すので、さらに100ms+20%の120ms待ちます。データが大きすぎれば、これを12回繰り返すと最大累積時間の3000msに達してしまうので、タイムアウトしてしまいますし、データが小さくても、データの分割数×100msの時間がかかってしまうので、非常に遅くなります。
Java の CORBA ではデータを100kBで分割するので、これを超えるデータをやり取りする際には、上記の設定を rtc.conf にて行っておいたほうがよいでしょう。
Windows
「java -version」がインストールした JDK のバージョンと異なる。
Unix
FedoraCore で Java をインストールする際の対応
不具合が発生した場合は、まず、Oracle の Java が使用されているかの確認をしてください。