0

同じ SONAME とインターフェイスを持つ 2 つのライブラリ (A と B) があるとします。開発者はコンパイル時に A に対してリンクしましたが、ユーザーは実行前に $LD_LIBRARY_PATH を設定しました。すべてはごく普通のことですが、ユーザーは、開発者が望んでいたものとは異なるライブラリを使用していることに気づきません。

私はコンパイルの学習者ですが、これが単なるハックであり、避けるべきかどうかはわかりません。コンパイラに "-Wl,--rpath" を指定するとランタイム リンク パスが優先されることはわかっていますが、ソフトウェア開発における最も "標準的な" 戦略が何であるかはわかりません。

4

1 に答える 1

1

ユーザーが LD_LIBRARY_PATH を設定すると、別のライブラリを取得することわかっていることになります。それが、最初に LD_LIBRARY_PATH を設定した理由です。デフォルトのライブラリが必要な場合は、その環境変数を設定していません。それは非常に明確な設定であり、「自分が何をしているかを知っており、自分の理由がある」ことを意味します。

実際の質問への回答に関しては、rpath は標準的な方法であり、多くのライブラリがそれを使用またはビルド時の構成オプションとして提供しています。LD_LIBRARY_PATH を上書きしてもよろしいですか?私の知る限り、そうではありません。また、ユーザーがデフォルトのライブラリ検索パスを変更する方法がなくなるため、そうすべきではありません。

于 2013-02-16T08:35:41.623 に答える