Closed mmurooka closed 10 years ago
openrtm-users@openrtm.org の返信で rtmlaunchではexecveでrtcdを起動しているため, 環境変数が引き継がれないことを指摘されました.
ということで,仕切り直すと (1) RobotHardware.soのrpathを消して,rtmlaunchでLD_LIBRARY_PATHが反映されるようにして頑張る. (2) hrpsys_preload_rtcとhrpsys_load_pathで指定する( https://github.com/start-jsk/rtmros_gazebo/pull/45 ) (3) RobotHardware.soをソースからコンパイルして,その時にrpathを指定する という選択肢があるようですが,どうしましょうか.
いずれにせよ,
rtmlaunchではexecveでrtcdを起動しているため,
を直しましょう.まずはticket切っておいて下さい.
(3) RobotHardware.soをソースからコンパイルして,その時にrpathを指定する
がいいけど,いい感じのcmakeに引数でこれができるのかな?を確認しなければと思っていました.
2014-05-03 2:30 GMT+09:00 Masaki Murooka notifications@github.com:
openrtm-users@openrtm.org の返信で rtmlaunchではexecveでrtcdを起動しているため, 環境変数が引き継がれないことを指摘されました.
ということで,仕切り直すと (1) RobotHardware.soのrpathを消して,rtmlaunchでLD_LIBRARY_PATHが反映されるようにして頑張る. (2) hrpsys_preload_rtcとhrpsys_load_pathで指定する( #45https://github.com/start-jsk/rtmros_gazebo/pull/45) (3) RobotHardware.soをソースからコンパイルして,その時にrpathを指定する という選択肢があるようですが,どうしましょうか.
— Reply to this email directly or view it on GitHubhttps://github.com/start-jsk/rtmros_gazebo/issues/35#issuecomment-42056875 .
rtmlaunchではexecveでrtcdを起動しているため,
を直しましょう.まずはticket切っておいて下さい.
を切りました.遅くなりました.
(3) RobotHardware.soをソースからコンパイルして,その時にrpathを指定する
がいいけど,いい感じのcmakeに引数でこれができるのかな?を確認しなければと思っていました.
hrpsysをソースから入れているときは,そこにあるソースを使いまわすのでいいでしょうか. その場合,aptから入れている環境にはどう対応しましょう. aptから入れている時のみ新しくソースを落としてくるとかでしょうか.
難しいですね. .so を分解して .o を取り出すツールがあったきがしたけど,思い出せない.それで再リンクというのもあるのかな.
2014-05-08 11:36 GMT+09:00 Masaki Murooka notifications@github.com:
rtmlaunchではexecveでrtcdを起動しているため,
を直しましょう.まずはticket切っておいて下さい.
を切りました.遅くなりました.
(3) RobotHardware.soをソースからコンパイルして,その時にrpathを指定する
がいいけど,いい感じのcmakeに引数でこれができるのかな?を確認しなければと思っていました.
hrpsysをソースから入れているときは,そこにあるソースを使いまわすのでいいでしょうか. その場合,aptから入れている環境にはどう対応しましょう. aptから入れている時のみ新しくソースを落としてくるとかでしょうか.
— Reply to this email directly or view it on GitHubhttps://github.com/start-jsk/rtmros_gazebo/issues/35#issuecomment-42507801 .
.so を分解して .o を取り出すツールがあったきがしたけど,思い出せない.それで再リンクというのもあるのかな.
分からないので調べてみた限りでは, 静的ライブラリなら,ar コマンドでメンバファイルを置き換えたりできるようですが, 動的ライブラリでは,難しそうです.
そもそも実行時にリンク先ファイルが決まるものなので, やっぱりrpathを置き換えるのが.oを置き換えることに相当するような気がします. rpathの上書きに長さ制限さえなければいいのですが..
結局この問題はどうなりましたか?
止まっています.
とりあえず https://github.com/start-jsk/rtmros_common/issues/456 をマージしてもらえたら他の人もそのまま使えるようになるのですが ベストではなさそうですがマージしてしまうというのは, あまり良くないでしょうか.
それで,この解決策はちょっと微妙な方法なので, もっと良い方法を探していくというようにしたいです.
何とかします.
ポイントは以下の2点.
1) RobotHardwareからlibiobにrpathでリンクがつながっている件 無理やりchrpathで外す,切り替える,はちょっとやり過ぎか. gcc -sahred -o RobotHardware.so libiob.o RobotHardware.so みたいにしたら何が起こるだろうか? これがだめなら,RobotHardwareのsrcを落としてコンパイルするか.
2) rtmlaunchがLD_LIBRARY_PATHを見えるように変えたい.
2014-05-28 10:20 GMT+09:00 Masaki Murooka notifications@github.com:
止まっています.
とりあえず start-jsk/rtmros_common#456https://github.com/start-jsk/rtmros_common/issues/456 をマージしてもらえたら他の人もそのまま使えるようになるのですが ベストではなさそうですがマージしてしまうというのは, あまり良くないでしょうか.
それで,この解決策はちょっと微妙な方法なので, もっと良い方法を探していくというようにしたいです.
— Reply to this email directly or view it on GitHubhttps://github.com/start-jsk/rtmros_gazebo/issues/35#issuecomment-44355261 .
@mmurooka 幾つか質問です.
とりあえず start-jsk/rtmros_common#456 をマージしてもらえたら他の人もそのまま使えるようになるのですが
ですが,上のリンクはPRではなくてIssueにみえますが,まちがいでしょか?
マージしたらいいのは,いかでしょうか?これはcaktinだけでしょうか?rosbuildは未対応でしょうか.
https://github.com/start-jsk/rtmros_gazebo/pull/45/files
chrpathでrpathを消すというのが必要になっているとおもうけど,これはどのPRでしょうか?
chpathでrpahを消す以外に,hrpsys_gazebo_general用にRobotHardwareを作るというのがあるとおもうけど,本当はhrpsysのソースをどこからか持ってくる,という方法がただしそうですが,以下はかなり強引に,https://github.com/k-okada/rtmros_gazebo/blob/RobotHardware_dummy/hrpsys_gazebo_general/iob/RobotHardware_dummy.cpp というフィアルからRobotHardwareを作って見ました.やっぱ強引かな.hrpsysをinstallするときにRobotHardwareのソースをコピーしておいて,hrpsys_gazebo_generalがそれを使うようにする,というのが正統で正しそうだろうか...
rtmlaunchでLD_LIBRARY_PATHをみるようにするのは難しいのでしょうか?
gazebo_generalだけでなく、staroや今後つかう他のロボットも同じやり方になるので、シンプルな方が分かりやすいかと思います。 hrpsys_sourceパッケージを作るというのもあるかもしれないですね。問題となっているのは、sourceの場所が参照できないという問題ですので。 groovyはsourceの場所が参照できるので、RobotHardwareをhrpsys-baseのソースから作っていて問題なく動いているはずです。
ですが,上のリンクはPRではなくてIssueにみえますが,まちがいでしょか? マージしたらいいのは,いかでしょうか?これはcaktinだけでしょうか?rosbuildは未対応でしょうか. https://github.com/start-jsk/rtmros_gazebo/pull/45/files
はい,間違えました.そのPRです. rosbuildは未対応です.
chrpathでrpathを消すというのが必要になっているとおもうけど,これはどのPRでしょうか?
このPRだけで動くようになります. rpathは消さなくても大丈夫です. https://github.com/start-jsk/rtmros_gazebo/issues/35#issuecomment-41825641 で十分に説明できているかわかりませんが,
hrpsys_preload_rtcで読み込んでほしいlibhrpioのパスを書いておくことで, RobotHardwareがlibhrpioを探す前に, 正しいlibhrpioを無理やりdlopenするので, RobotHardwareのrpathに応じたdlopenはしなくなっているはずです.
rtmlaunchでLD_LIBRARY_PATHをみるようにするのは難しいのでしょうか?
gazebo_generalだけでなく、staroや今後つかう他のロボットも同じやり方になるので、シンプルな方が分かりやすいかと思います。
+1
むつかしくはないけどかなり強く意識ないと簡単にトラブルになりますね。
また前提条件としてhrpsysでRobotHardwareをコンパイルするときにrpathしないというのが出てきます。 このrtcのlibHrpIo.soだけ別扱いにしますか?hrpsys全体でrpathしないというのは危険ですよね。 RobotHardwareCompはどうしますか?こちらもrpathははずしましでしょうか?
hrpsys_sourceではなくhrpsys/src/rtc/RobotHardware にインストールしてロボット毎にRobitHardwareをつくるのがシンプルに思うのですがどうでしょう?
また前提条件としてhrpsysでRobotHardwareをコンパイルするときにrpathしないというのが出てきます。
ああ、なるほど。
ロボット毎にRobitHardwareをつくるのがシンプルに思うのですがどうでしょう?
それが良いと思います。 このRobotHardware_dummy.cppではなく、おおもとのソースコードを使うことは難しいのでしょうか?
hrpsys_sourceではなくhrpsys/src/rtc/RobotHardware にインストールしてロボット毎にRobitHardwareをつくるのがシンプルに思うのですがどうでしょう?
+1
https://github.com/start-jsk/rtmros_gazebo/blob/master/hrpsys_gazebo_general/catkin.cmake#L24 is commented out and hrpsys is not compiled.