[openrtm-users 03026] LD_LIBRARY_PATHについて

8 posts / 0 new
Last post
Masaki Murooka
Offline
Last seen: Never ago
Joined: 2014-04-30 23:00
[openrtm-users 03026] LD_LIBRARY_PATHについて

室岡です

rtcdを使ってAというディレクトリにあるA.soというコンポーネントを
manager.modules.preload:A.so
manager.modules.load_path:A
というオプションをつかってで読み込んでいるのですが,
sh 1: rtcprof: not found
というエラーがでています.
A.soはBというディレクトリにあるB.soというライブラリに依存しており,
manager.modules.load_path:B,A
としてみたり,
export LD_LIBRARY_PATH=A:B
しても同じ状況です.
ただ,
manager.modules.preload:B.so,A.so
とすると,ちゃんとB.soが読み込まれています.

rtcdで使う.soの読み込み時にはLD_LIBRARY_PATHは見ないのでしょうか?

Undefined
isao-hara
Offline
Last seen: 4 years 6 months ago
Joined: 2011-06-04 18:20
[openrtm-users 03027] LD_LIBRARY_PATHについて

室岡さん:

こんにちは、産総研の原です。
rtcdの件ですが、詳細は、安藤の方からあるかもしれませんが、私の方で少しソースコードを見たところ、モジュールのロードには、Linuxでは、内部でdlopenで読み込んでいます。
基本的には、動作はdlopenと同じだと思います。

マニュアルを参照していただければわかると思うのですが、室岡さんの動作環境、実行手順等の記載がないのであくまでも推測でしかありません。

rtcdの起動前にLD_LIBRARY_PATHが設定されてあれば、本来なら、依存ライブラリは、検索されると思います。
ただし、rtcdが set-UIDやset-GIDされていればこの環境変数は無視されますが。

もう少し実行された状況を記載していただければ、検証できるとは思いますが。

以上、よろしくお願いいたします。

2014年4月30日 22:08 Masaki Murooka :

> 室岡です
>
> rtcdを使ってAというディレクトリにあるA.soというコンポーネントを
> manager.modules.preload:A.so
> manager.modules.load_path:A
> というオプションをつかってで読み込んでいるのですが,
> sh 1: rtcprof: not found
> というエラーがでています.
> A.soはBというディレクトリにあるB.so
> というライブラリに依存しており,
> manager.modules.load_path:B,A
> としてみたり,
> export LD_LIBRARY_PATH=A:B
> しても同じ状況です.
> ただ,
> manager.modules.preload:B.so,A.so
> とすると,ちゃんとB.soが読み込まれています.
>
> rtcdで使う.soの読み込み時にはLD_LIBRARY_PATHは見ないのでしょうか?
>

Ando Noriaki
Offline
Last seen: 1 year 9 months ago
Joined: 2011-09-04 17:20
[openrtm-users 03028] LD_LIBRARY_PATHについて

室岡様

安藤です

rtcd内の動的リンクライブラリのロードにはLinuxではdlopenを
使っているだけですので,LD_LIBRARY_PATHは効くと思います。
ソースをざっと見まわしてみても特に変わったことはしていないようでした。

$ ldd A.so
$ ldd B.so

の結果を教えていただけますか?

A.so をリンクするとき -lB はつけてますでしょうか?

2014年4月30日 22:08 Masaki Murooka :
> 室岡です
>
> rtcdを使ってAというディレクトリにあるA.soというコンポーネントを
> manager.modules.preload:A.so
> manager.modules.load_path:A
> というオプションをつかってで読み込んでいるのですが,
> sh 1: rtcprof: not found
> というエラーがでています.
> A.soはBというディレクトリにあるB.soというライブラリに依存しており,
> manager.modules.load_path:B,A
> としてみたり,
> export LD_LIBRARY_PATH=A:B
> しても同じ状況です.
> ただ,
> manager.modules.preload:B.so,A.so
> とすると,ちゃんとB.soが読み込まれています.
>
> rtcdで使う.soの読み込み時にはLD_LIBRARY_PATHは見ないのでしょうか?
>

Masaki Murooka
Offline
Last seen: Never ago
Joined: 2014-04-30 23:00
[openrtm-users 03029] LD_LIBRARY_PATHについて

原様,安藤様

室岡と申します.
ご返答ありがとうございます.

実行結果を追加して説明させていただきます.
OpenRTM初心者ですので,間違い等ございましたら是非ご指摘ください.

hrpsys-baseをROSから使っておりまして[1],
ROS標準の起動スクリプトファイルの中でrtcdや各コンポーネントを起動しています.
A,Bの具体的なファイル名はAはRobotHardware.so,BはlibhrpIo.soとなっています

[1] https://github.com/start-jsk/hrpsys

RobotHardware.soはlibhrpIo.soをダイナミックリンクしています.
複数のlibhrpIo.soというファイルがあるのですが,
こちらの都合でrpathを使わずに特定のlibhrpIo.soにリンクさせたいという状況です.

/home/murooka/catkin_ws/ws_rtmros_common/devel/lib/libhrpIo.so
(以降,libhrpIo.so)
/home/murooka/catkin_ws/ws_rtmros_gazebo/src/rtm-ros-robotics/rtmros_gazebo/hrpsys_gazebo_general/lib/libhrpIo.so(以降,libhrpIo.so)
というファイルがあって,
RobotHardware.soをlibhrpIo.soにリンクさせようとしています.
RobotHardware.soにrpathを設定していない状況で,
LD_LIBRARY_PATHの先頭にlibhrpIo.soを含むディレクトリのパスを追加しています.
ldd RobotHardware.so では,libhrpIo.soをリンクしているという結果が得られるのですが,
ROS起動スクリプトから起動するとlibhrpIo.soをリンクしてしまいます.

ログファイルを2つ添付させて頂きましたが,
roslaunch-ros-default-log-20140502.log は,ROS起動時に自動生成されるログファイル,
rtmlaunch-terminal-output-with-strace-20140502.log
はターミナル出力でstraceを付けたrtcdの出力が含まれています.

roslaunch-ros-default-log-20140502.log 内に出力される実行時のLID_LIBRARY_PATHは以下のようになっており,
libhrpIo.soを含むディレクトリが先頭に指定されています.

'LD_LIBRARY_PATH':
'/home/murooka/catkin_ws/ws_rtmros_gazebo/src/rtm-ros-robotics/rtmros_gazebo/hrpsys_gazebo_general/lib/:/home/murooka/catkin_ws/ws_jsk_roseus/src/jsk-ros-pkg/jsk_roseus/euslisp/jskeus/eus/Linux64/bin:/usr/lib/gazebo-2.2/plugins:/home/murooka/catkin_ws/ws_rtmros_gazebo/devel/lib:/home/murooka/catkin_ws/ws_rtmros_tutorials/devel/lib:/home/murooka/catkin_ws/ws_rtmros_common/devel/lib:/home/murooka/catkin_ws/ws_jsk_control/devel/lib:/home/murooka/catkin_ws/ws_jsk_pr2eus/devel/lib:/home/murooka/catkin_ws/ws_jsk_recognition/devel/lib:/home/murooka/catkin_ws/ws_jsk_model_tools/devel/lib:/home/murooka/catkin_ws/ws_jsk_roseus/devel/lib:/home/murooka/catkin_ws/ws_jsk_common/devel/lib:/opt/ros/hydro/lib:/home/murooka/catkin_ws/ws_jsk_roseus/src/jsk-ros-pkg/jsk_roseus/euslisp/jskeus/eus/Linux64/bin:/usr/lib/gazebo-2.2/plugins:/home/murooka/catkin_ws/ws_jsk_roseus/src/jsk-ros-pkg/jsk_roseus/euslisp/jskeus/eus/Linux64/bin:/usr/lib/gazebo-2.2/plugins:/home/murooka/catkin_ws/ws_rtmros_gazebo/src/rtm-ros-robotics/rtmros_gazebo/hrpsys_gazebo_general/plugins:/home/murooka/catkin_ws/ws_rtmros_gazebo/src/rtm-ros-robotics/rtmros_gazebo/hrpsys_gazebo_general/plugins:/home/murooka/catkin_ws/ws_rtmros_gazebo/src/rtm-ros-robotics/rtmros_gazebo/hrpsys_gazebo_general/plugins'

rtmlaunch-terminal-output-with-strace-20140502.log の最後の方で
RobotHardware.soをlddしており,
以下のようにlibhrpIo.soをリンクしています.

ldd /home/murooka/catkin_ws/ws_rtmros_common/src/rtm-ros-robotics/openrtm_common/hrpsys/lib/RobotHardware.so
libhrpIo.so => /home/murooka/catkin_ws/ws_rtmros_gazebo/src/rtm-ros-robotics/rtmros_gazebo/hrpsys_gazebo_general/lib/libhrpIo.so
(0x00007f0727a6b000)

また,rtmlaunch-terminal-output-with-strace-20140502.log の最後の方で
RobotHardware.soにrpathが無いことを確認しています.

chrpath /home/murooka/catkin_ws/ws_rtmros_common/src/rtm-ros-robotics/openrtm_common/hrpsys/lib/RobotHardware.so
/home/murooka/catkin_ws/ws_rtmros_common/src/rtm-ros-robotics/openrtm_common/hrpsys/lib/RobotHardware.so:
no rpath or runpath tag found.

ただ,rtmlaunch-terminal-output-with-strace-20140502.logの前半にある
起動時のstarceのログでは
以下のようにlibhrpIo.soがopenされてしまています.

open("/home/murooka/catkin_ws/ws_rtmros_common/devel/lib/libhrpIo.so",
O_RDONLY|O_CLOEXEC) = 14

このような結果から
openrtmコンポーネントの動的リンクのためにdlopenする際に
LD_LIBRARY_PATHが反映されていないorうわ書かれているのではないかと
考えて質問させて頂きました.

以上,長文になってしまい恐縮ですが,
よろしくお願い致します.

2014年5月2日 1:17 Ando Noriaki :
> 室岡様
>
> 安藤です
>
> rtcd内の動的リンクライブラリのロードにはLinuxではdlopenを
> 使っているだけですので,LD_LIBRARY_PATHは効くと思います。
> ソースをざっと見まわしてみても特に変わったことはしていないようでした。
>
> $ ldd A.so
> $ ldd B.so
>
> の結果を教えていただけますか?
>
> A.so をリンクするとき -lB はつけてますでしょうか?
>
>
>
> 2014年4月30日 22:08 Masaki Murooka :
>> 室岡です
>>
>> rtcdを使ってAというディレクトリにあるA.soというコンポーネントを
>> manager.modules.preload:A.so
>> manager.modules.load_path:A
>> というオプションをつかってで読み込んでいるのですが,
>> sh 1: rtcprof: not found
>> というエラーがでています.
>> A.soはBというディレクトリにあるB.soというライブラリに依存しており,
>> manager.modules.load_path:B,A
>> としてみたり,
>> export LD_LIBRARY_PATH=A:B
>> しても同じ状況です.
>> ただ,
>> manager.modules.preload:B.so,A.so
>> とすると,ちゃんとB.soが読み込まれています.
>>
>> rtcdで使う.soの読み込み時にはLD_LIBRARY_PATHは見ないのでしょうか?
>>

isao-hara
Offline
Last seen: 4 years 6 months ago
Joined: 2011-06-04 18:20
[openrtm-users 03030] LD_LIBRARY_PATHについて

室岡さん:

こんにちは、産総研の原です。

フォローは、安藤さんからもあるとは思いますが。。。。

Logを拝見したのですが、rtcdは、execveで実行されていますよね?
この時に環境変数が設定されていないようですので、実行shellの環境変数と
異なるののは当然かと思います。

LD_LIBRARY_PATHを設定したshellからrtcdを起動するか、execveのシステムコールの引数で、LD_LIBRARY_PATHの値を引き渡さないと、デフォルトのままになると思います。

これは、UNIX系のシステムでは、標準的な動作だと思います。rtcdは、dlopen関数を呼び出しているだけですので、OSの標準的な振る舞いしかしないと思います。

rtcdを起動させているプログラムがどうしているかは、こちらではわかりませんので、プログラムの開発者にも同じように問い合わせていただければよいと思います。

以上、よろしくお願いいたします。

2014年5月2日 20:23 Masaki Murooka :

> 原様,安藤様
>
>
> 室岡と申します.
> ご返答ありがとうございます.
>
>
> 実行結果を追加して説明させていただきます.
> OpenRTM初心者ですので,間違い等ございましたら是非ご指摘ください.
>
>
> hrpsys-baseをROSから使っておりまして[1],
> ROS標準の起動スクリプトファイルの中でrtcdや各コンポーネントを起動しています.
> A,Bの具体的なファイル名はAはRobotHardware.so,BはlibhrpIo.soとなっています
>
> [1] https://github.com/start-jsk/hrpsys
>
>
> RobotHardware.soはlibhrpIo.so
> をダイナミックリンクしています.
> 複数のlibhrpIo.soというファイルがあるのですが,
> こちらの都合でrpathを使わずに特定のlibhrpIo.soにリンクさせたいという状況です.
>
> /home/murooka/catkin_ws/ws_rtmros_common/devel/lib/libhrpIo.so
> (以降,libhrpIo.so)
>
> /home/murooka/catkin_ws/ws_rtmros_gazebo/src/rtm-ros-robotics/rtmros_gazebo/hrpsys_gazebo_general/lib/libhrpIo.so(以降,libhrpIo.so)
> というファイルがあって,
> RobotHardware.soをlibhrpIo.so
> にリンクさせようとしています.
> RobotHardware.soにrpathを設定していない状況で,
> LD_LIBRARY_PATHの先頭にlibhrpIo.soを含むディレクトリのパスを追加しています.
> ldd RobotHardware.so では,libhrpIo.soをリンクしているという結果が得られるのですが,
> ROS起動スクリプトから起動するとlibhrpIo.soをリンクしてしまいます.
>
>
>
>
> ログファイルを2つ添付させて頂きましたが,
> roslaunch-ros-default-log-20140502.log は,ROS起動時に自動生成されるログファイル,
> rtmlaunch-terminal-output-with-strace-20140502.log
> はターミナル出力でstraceを付けたrtcdの出力が含まれています.
>
>
> roslaunch-ros-default-log-20140502.log
> 内に出力される実行時のLID_LIBRARY_PATHは以下のようになっており,
> libhrpIo.soを含むディレクトリが先頭に指定されています.
>
> 'LD_LIBRARY_PATH':
>
> '/home/murooka/catkin_ws/ws_rtmros_gazebo/src/rtm-ros-robotics/rtmros_gazebo/hrpsys_gazebo_general/lib/:/home/murooka/catkin_ws/ws_jsk_roseus/src/jsk-ros-pkg/jsk_roseus/euslisp/jskeus/eus/Linux64/bin:/usr/lib/gazebo-2.2/plugins:/home/murooka/catkin_ws/ws_rtmros_gazebo/devel/lib:/home/murooka/catkin_ws/ws_rtmros_tutorials/devel/lib:/home/murooka/catkin_ws/ws_rtmros_common/devel/lib:/home/murooka/catkin_ws/ws_jsk_control/devel/lib:/home/murooka/catkin_ws/ws_jsk_pr2eus/devel/lib:/home/murooka/catkin_ws/ws_jsk_recognition/devel/lib:/home/murooka/catkin_ws/ws_jsk_model_tools/devel/lib:/home/murooka/catkin_ws/ws_jsk_roseus/devel/lib:/home/murooka/catkin_ws/ws_jsk_common/devel/lib:/opt/ros/hydro/lib:/home/murooka/catkin_ws/ws_jsk_roseus/src/jsk-ros-pkg/jsk_roseus/euslisp/jskeus/eus/Linux64/bin:/usr/lib/gazebo-2.2/plugins:/home/murooka/catkin_ws/ws_jsk_roseus/src/jsk-ros-pkg/jsk_roseus/euslisp/jskeus/eus/Linux64/bin:/usr/lib/gazebo-2.2/plugins:/home/murooka/catkin_ws/ws_rtmros_gazebo/src/rtm-ros-robotics/rtmros_gazebo/hrpsys_gazebo_general/plugins:/home/murooka/catkin_ws/ws_rtmros_gazebo/src/rtm-ros-robotics/rtmros_gazebo/hrpsys_gazebo_general/plugins:/home/murooka/catkin_ws/ws_rtmros_gazebo/src/rtm-ros-robotics/rtmros_gazebo/hrpsys_gazebo_general/plugins'
>
>
> rtmlaunch-terminal-output-with-strace-20140502.log の最後の方で
> RobotHardware.soをlddしており,
> 以下のようにlibhrpIo.soをリンクしています.
>
> ldd
> /home/murooka/catkin_ws/ws_rtmros_common/src/rtm-ros-robotics/openrtm_common/hrpsys/lib/RobotHardware.so
> libhrpIo.so =>
> /home/murooka/catkin_ws/ws_rtmros_gazebo/src/rtm-ros-robotics/rtmros_gazebo/hrpsys_gazebo_general/lib/libhrpIo.so
> (0x00007f0727a6b000)
>
> また,rtmlaunch-terminal-output-with-strace-20140502.log の最後の方で
> RobotHardware.soにrpathが無いことを確認しています.
>
> chrpath
> /home/murooka/catkin_ws/ws_rtmros_common/src/rtm-ros-robotics/openrtm_common/hrpsys/lib/RobotHardware.so
>
> /home/murooka/catkin_ws/ws_rtmros_common/src/rtm-ros-robotics/openrtm_common/hrpsys/lib/RobotHardware.so:
> no rpath or runpath tag found.
>
> ただ,rtmlaunch-terminal-output-with-strace-20140502.logの前半にある
> 起動時のstarceのログでは
> 以下のようにlibhrpIo.soがopenされてしまています.
>
> open("/home/murooka/catkin_ws/ws_rtmros_common/devel/lib/libhrpIo.so",
> O_RDONLY|O_CLOEXEC) = 14
>
>
>
>
> このような結果から
> openrtmコンポーネントの動的リンクのためにdlopenする際に
> LD_LIBRARY_PATHが反映されていないorうわ書かれているのではないかと
> 考えて質問させて頂きました.
>
>
> 以上,長文になってしまい恐縮ですが,
> よろしくお願い致します.
>
>
> 2014年5月2日 1:17 Ando Noriaki :
> > 室岡様
> >
> > 安藤です
> >
> > rtcd内の動的リンクライブラリのロードにはLinuxではdlopenを
> > 使っているだけですので,LD_LIBRARY_PATHは効くと思います。
> > ソースをざっと見まわしてみても特に変わったことはしていないようでした。
> >
> > $ ldd A.so
> > $ ldd B.so
> >
> > の結果を教えていただけますか?
> >
> > A.so をリンクするとき -lB はつけてますでしょうか?
> >
> >
> >
> > 2014年4月30日 22:08 Masaki Murooka :
> >> 室岡です
> >>
> >> rtcdを使ってAというディレクトリにあるA.soというコンポーネントを
> >> manager.modules.preload:A.so
> >> manager.modules.load_path:A
> >> というオプションをつかってで読み込んでいるのですが,
> >> sh 1: rtcprof: not found
> >> というエラーがでています.
> >> A.soはBというディレクトリにあるB.so
> というライブラリに依存しており,
> >> manager.modules.load_path:B,A
> >> としてみたり,
> >> export LD_LIBRARY_PATH=A:B
> >> しても同じ状況です.
> >> ただ,
> >> manager.modules.preload:B.so,A.so
> >> とすると,ちゃんとB.soが読み込まれています.
> >>
> >> rtcdで使う.soの読み込み時にはLD_LIBRARY_PATHは見ないのでしょうか?
> >>
> >> --
> >> =========================
> >> 室岡雅樹(Masaki Murooka)
> >> 東京大学大学院 情報理工学系研究科 知能機械情報学専攻
> >> 稲葉・岡田研究室(情報システム工学研究室)
> >> murooka@jsk.t.u-tokyo.ac.jp
> >> _______________________________________________
> >> openrtm-users mailing list
> >> openrtm-users@openrtm.org
> >> http://www.openrtm.org/mailman/listinfo/openrtm-users
> > _______________________________________________
> > openrtm-users mailing list
> > openrtm-users@openrtm.org
> > http://www.openrtm.org/mailman/listinfo/openrtm-users
>
>
>

Kei Okada
Offline
Last seen: Never ago
Joined: 2011-05-17 20:20
[openrtm-users 03031] LD_LIBRARY_PATHについて

2014-05-02 21:25 GMT+09:00 原功 :

>
> LD_LIBRARY_PATHを設定したshellからrtcdを起動するか、execveのシステムコールの引数で、LD_LIBRARY_PATHの値を引き渡さないと、デフォルトのままになると思います。
>

あ,,,,これ,僕が犯人です...すいません.
僕の方で直す事柄でした.本郷にお騒がせしました.
また(いつもですが)丁寧なご指導,ありがとうございました.大変勉強になりました.

(rtmlaunchというroslaunch的なデプロイシステムをつくっていて,そこが問題だと思います....)

Masaki Murooka
Offline
Last seen: Never ago
Joined: 2014-04-30 23:00
[openrtm-users 03032] LD_LIBRARY_PATHについて

原様

ご指摘ありがとうございます.

execveでrtcdを呼んでいることをすっかり見落としておりました.

お手数おかけしました.
今後ともよろしくお願い致します.

2014年5月2日 21:34 Kei Okada :
>
> 2014-05-02 21:25 GMT+09:00 原功 :
>>
>>
>> LD_LIBRARY_PATHを設定したshellからrtcdを起動するか、execveのシステムコールの引数で、LD_LIBRARY_PATHの値を引き渡さないと、デフォルトのままになると思います。
>
>
> あ,,,,これ,僕が犯人です...すいません.
> 僕の方で直す事柄でした.本郷にお騒がせしました.
> また(いつもですが)丁寧なご指導,ありがとうございました.大変勉強になりました.
>
> (rtmlaunchというroslaunch的なデプロイシステムをつくっていて,そこが問題だと思います....)
>
>
> _______________________________________________
> openrtm-users mailing list
> openrtm-users@openrtm.org
> http://www.openrtm.org/mailman/listinfo/openrtm-users
>

Ando Noriaki
Offline
Last seen: 1 year 9 months ago
Joined: 2011-09-04 17:20
[openrtm-users 03033] LD_LIBRARY_PATHについて

安藤です

原さんから完全な回答があったので私の方から何も言うことはありませんが,
RTMにもデプロイシステムの標準を定めるべきということでかすね。
いま,OMGで行われているUCM標準化に期待したいと思います。

JSKで作られているデプロイシステムについてコンセプトなどを解説いただければ
UCMの標準に取り入れることも可能かと思いますので,MLなどで
ご提案いただければと思います。

よろしくお願いいたします。

2014年5月2日 22:12 Masaki Murooka :
> 原様
>
> ご指摘ありがとうございます.
>
> execveでrtcdを呼んでいることをすっかり見落としておりました.
>
> お手数おかけしました.
> 今後ともよろしくお願い致します.
>
>
> 2014年5月2日 21:34 Kei Okada :
>>
>> 2014-05-02 21:25 GMT+09:00 原功 :
>>>
>>>
>>> LD_LIBRARY_PATHを設定したshellからrtcdを起動するか、execveのシステムコールの引数で、LD_LIBRARY_PATHの値を引き渡さないと、デフォルトのままになると思います。
>>
>>
>> あ,,,,これ,僕が犯人です...すいません.
>> 僕の方で直す事柄でした.本郷にお騒がせしました.
>> また(いつもですが)丁寧なご指導,ありがとうございました.大変勉強になりました.
>>
>> (rtmlaunchというroslaunch的なデプロイシステムをつくっていて,そこが問題だと思います....)
>>
>>
>> _______________________________________________
>> openrtm-users mailing list
>> openrtm-users@openrtm.org
>> http://www.openrtm.org/mailman/listinfo/openrtm-users
>>
>
>
>

Log in or register to post comments

Download

latest Releases : 2.0.0-RELESE

2.0.0-RELESE Download page

Number of Projects

Choreonoid

Motion editor/Dynamics simulator

OpenHRP3

Dynamics simulator

OpenRTP

Integrated Development Platform

AIST RTC collection

RT-Components collection by AIST

TORK

Tokyo Opensource Robotics Association

DAQ-Middleware

Middleware for DAQ (Data Aquisition) by KEK