Closed hikun5296 closed 7 years ago
確かに落ちますね・・・ しかも
rtmlaunch hrpsys_ros_bridge_tutorials chidori.launch
hrpsyspy
からだとhcf.st_svc.getParameter()
は普通に呼べるという・・・
@hikun5296 hrpsysのdebが入っていると落ちるみたいですが,どうでしょうか? 今日思い出して,調査が進んでおらず,debだけだと落ちないのか,なぜchidoriだけ落ちるのかは分かっていません…
これは確かにros-indigo-hrpsysの有無のやつっぽいですね・・・ 消したら上がるのを確認しました.
同じく解決しました ありがとうございました
良くない現象だとは思うので,openにしておいてもらえますか?
hrpsysのsrcとdebが共存している状態で,USE_ROBOTHARDWAREがtrueだとchidori, jaxon共に落ちるみたいです
hrpsysのsrcとdebが共存している状態で,USE_ROBOTHARDWAREがtrueだとchidori, jaxon共に落ちるみたいです
なんとなく思い出しましたが、そうだった気がします。
https://github.com/start-jsk/rtmros_choreonoid/blob/master/hrpsys_choreonoid/iob/CMakeLists.txt#L18 lddでRobotHardware_choreonoid.soを見たところ,ここのhrpIo_choreonoidを除くライブラリ群がソースの有無に関わらずdebの方を指していることが問題でした (特に今回のセグフォはlibhrpsysBaseStub.soが直接の原因みたいです)
良く分からなかったのですが,link_directoriesの優先順位ってどうなっているんでしょうか…? find_libraryで明示的にパスを指定したところ正しく動作したので,この方法で良ければPR送ることができます(ちなみに公式でもlink_directoriesはめったに使わないと書かれていました)
そういうことか。 僕の手元の変更が大きくない感じだと以下の直し方。 https://github.com/start-jsk/rtmros_choreonoid/pull/225 (debが入っている時に動くかは未確認)
石川くんの方法もPRしてもらえるかな。
jsk-ros-pkg/rtm-ros-roboticsのcmakeではlink_directoriesを使っている例の方が多い。 pkg_check_modulesで絶対パスが返って来ていないようで、そうすると、 link_directoriesかfind_libraryを使わざるを得ない気がする。 find_libraryを使っている例はjsk関係だと、これくらいか。 https://github.com/jsk-ros-pkg/jsk_control/blob/master/eus_nlopt/CMakeLists.txt#L12-L36
確認方法はrpathで/opt/ros/indigo/libがhrpsysのディレクトリより先に来ていないこと。 (rm -rf ~/ros/indigo/build/hrpsys_choreonoid をする) catkin build --this --start-with-this -iv してログを眺める objdump -x RobotHardware_choreonoid0.so | grep RPATH して出来たバイナリのrpathを確認する
RPATHは意図して指定しない限りバイナリに埋め込まれないという理解なのですが, CMakeのどのコマンドがRPATHを指定したことになっているのでしょうか?
@YoheiKakiuchi さん find_libraryを使った方法を #226 に送りました
参考&勉強になります 確信が持てていないのですが,link_directories や include_directoriesの左にあるほう(リストの先頭?)が優先的に読み込まれるのでしょうか それと, #225 ではlink_directoriesを2回呼んでいますが,この場合上書きと追加どちらなのでしょう?
RPATHは意図して指定しない限りバイナリに埋め込まれないという理解なのですが, CMakeのどのコマンドがRPATHを指定したことになっているのでしょうか?
仕様などをあたったわけでないですが、link_directoriesの指定とtarget_link_librariesの絶対パスでのsoの指定はrpthに書かれるように見えますね。
catkinでroscppをrequireするとrpathに/opt/ros/indigo/libが入っていて、それより先に正しいhrpsysのrpathを入れられればいいようです。
ちょくちょくこちらの問題が起こっている人がいるみたいなので, #226 のreviewとマージをお願いできますか. それと,僕の手元(hrpsysのdeb, src共にあり)では #225 では/opt/ros/indigo/lib がRPATHの先頭に来ているみたいでした
hrpsys+rtmros_common+rtmros_tutorials+rtmros_choreonoidとchoreonoid本体はsrcで それ以外はdebで入れている環境なのですが、 chidori_choreonoid.launchを立ち上げたときだけ落ちます jaxon_red_choreonoid.launchでは問題なく立ち上がります
心当たりや解決策等分かる方いませんでしょうか?