20

バイナリまたはライブラリをビルドするときrpath、つまり

-Wl,rpath,<path/to/lib>

バイナリの実行時に必要なライブラリを見つける場所をリンカに指示します。

ここでの絶対パスと相対パスに関する UNIX の哲学は何ですか? どこからでもライブラリを見つけることができるように、絶対パスを使用する方が良いですか? または、ディレクトリ全体をコピーしたり、より高いレベルのパスの名前を変更したりしても、バイナリが使用できなくなることがないように、相対にする方がよいでしょうか?

アップデート

を使用する$ORIGINのが、通常、バイナリを構築するための推奨される方法です。ライブラリの場合、絶対パスを入力するのが好きです。そうしないと、ライブラリにリンクできなくなるからです。シンボリック リンクは、リンクではなく、リンク$ORIGINのパスを指すようにを変更します。

4

2 に答える 2

39

の場合rpath、相対パスを使用しても意味がありません。相対パスは、バイナリ/ライブラリが見つかったディレクトリに対する相対パスではなく、現在の作業ディレクトリに対する相対パスになるためです。したがって、ほとんどの場合、$PATHまたはライブラリにある実行可能ファイルでは機能しません。

代わりに、$ORIGIN「特別な」パスを使用して、実行可能ファイルへの相対パスを指定
-Wl,-rpath,'$ORIGIN'できます。シェルが変数として解釈するのを避けるために、引用符で囲む必要があることに注意してください。これを Makefile で実行しようとすると、$$make が解釈することも避ける必要があり$ます。

于 2016-06-27T15:47:53.420 に答える