/usr/binにあるプログラムが常に/usr/libにあるライブラリを使用するようにする方法

/usr/binにあるプログラムが常に/usr/libにあるライブラリを使用するようにする方法

Fedora 26のパスの問題で苦労しています。私は更新されたプログラムとライブラリを構築し、それをプログラムが使用します/usr/local。現在、未知の理由から、Fedora 26はLinuxライブラリを使用しています。/usr/local/bin/usr/local/libgawk/usr/bin/gawk/usr/local/lib

ライブラリが/usr/local/lib期待したものと互換性がないため、gawkスクリプトが破損します。あるいは、より正確には、私のスクリプトがAutotoolsを呼び出してからパスがめちゃくちゃでなくても、Autotoolsは中断されます。背景の問題の詳細については、次をご覧ください。libreadline.so.7: 未定義シンボル: UPスタックオーバーフローに。

/usr/bin私はその中のすべてのプログラムが必ずつながるべきであるというポリシーを実施したいと思います/usr/lib。私はミックスインやインサートを気にしません。これを行う必要がある場合は、ソースからパッケージをビルドしてください/usr/local

たとえば、他のオペレーティングシステムでは、以前はOS XとWindowsのマニフェストでinstall_namesこの問題を解決しました。 Linuxでは、同じ問題が悪化することを許可します(--enable-new-dtags私の考えでは、これが問題を解決できない最新の倉庫だと思います)。

/usr/binプログラムをライブラリに強制的にリンクするにはどうすればよいですか/usr/lib

ベストアンサー1

動的部分を指定して、実行可能ファイルの検索パスをオーバーライドできます DT_RUNPATH。バラよりld.so のマニュアルページ。標準の場所を使用することは標準でなければならず、/usr/libライブラリを使用したいプログラム(あまりにも多くないことを願っています)は、リンカに次のgccオプションを追加してリンクする必要があります。/usr/local/lib

gcc ... -Wl,-rpath,/usr/local/lib -Wl,--enable-new-tags ...

おすすめ記事