Fedora 26のパスの問題で苦労しています。私は更新されたプログラムとライブラリを構築し、それをプログラムが使用します/usr/local
。現在、未知の理由から、Fedora 26はLinuxライブラリを使用しています。/usr/local/bin
/usr/local/lib
gawk
/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 ...
答え2
export LD_LIBRARY_PATH=/usr/lib
または、次のコマンドを直接実行してください。
LD_LIBRARY_PATH=/usr/lib gawk
デフォルトの検索順序は次のように設定できます。/etc/ld.so.conf
答え3
システムにすでに存在するライブラリを手動でコンパイルする場合は、/usr/lib
場所に関係なく最新のインストールが優先されます。ライブラリパスは/etc/ld.so.confで指定されており、必要なライブラリへのパスを含む新しいファイルを作成して後で実行できます。/usr/lib64
/usr/local/lib
/usr/local/lib64
/etc/ld.so.conf.d
ldconfig
あるいは、スクリプト内のLD_LIBRARY_PATH
環境変数を使用して独自のライブラリパスを設定することもできます。これにより、スクリプトは指定されたライブラリパスを使用します。複数のパスをセミコロンで区切って提供できます。