LD_LIBRARY_PATHでldconfigとld.so.confを使用する

LD_LIBRARY_PATHでldconfigとld.so.confを使用する

私はしばしばgmp-6.1.2、mpfr-4.0.1、gcc-7.xなどの使用のためにソースからさまざまなライブラリを構築します。これを行うとき、私は--prefix=/usr/local/gcc-7.2.0これがインストールされている場所を正確に知り、既存のライブラリを台無しにする必要がないようにこれを使用することを好みます。もしそうなら、基本的に私が知っているのは、それがmake install私に知らせる最後のものはアップデートまたは設定ですLD_LIBRARY_PATH。時には必ずしもそうではありませんLD_RUN_PATH

ほとんどの場合、LD_LIBRARY_PATH後で必要に応じて手動で設定したり、同様の方法でグローバルに設定したりして/etc/bash.bashrc.local効果がありました。

これは次のことを意味しますmake install

Libraries have been installed in:
  /usr/local/mfprtest/lib

If you ever happen to want to link against installed libraries
in a given directory, LIBDIR, you must either use libtool, and
specify the full pathname of the library, or use the '-LLIBDIR'
flag during linking and do at least one of the following:
  - add LIBDIR to the 'LD_LIBRARY_PATH' environment variable
    during execution
  - add LIBDIR to the 'LD_RUN_PATH' environment variable
    during linking
  - use the '-Wl,-rpath -Wl,LIBDIR' linker flag
  - have your system administrator add LIBDIR to '/etc/ld.so.conf'

See any operating system documentation about shared libraries for
more information, such as the ld(1) and ld.so(8) manual pages.

より良い方法がありますか?それとももう少し正式な方法ですか?using ldconfig and ld.so.confthan using LD_LIBRARY_PATHand LD_RUN_PATH, and PATH?これは特に私自身のコードを書くためのものですが、他のユーザーにも当てはまります。 gmpなど、特定のLinuxバージョンにインストールされているよりも最新のライブラリのさまざまなバージョンに接続したいと思います。 、mpfr、gcc-5.x、gcc-6.x、gcc-7.xなど、手動でインストールされたさまざまなgccバージョンを使用します。

たとえば、デフォルトでインストールされたら、/usr/local/gcc-7.3.0自分とシステムでホームブルーのC、C ++、またはFortranのソースコードを作成または実行している他の人が/usr/local/gcc-7.3.0/usr/bin/および/usr/64/にあるシステムストアを使用するしたい。

ベストアンサー1

回避策は、ライブラリディレクトリを(またはファイル)/usr/local/gcc-7.3.0/lib/に追加し、ユーザーのシェルプロファイルを実行または変更してシステムの/をオーバーライドし、リンカが共有オブジェクトを見つけることができるように別々のエントリを追加することです。/etc/ld.so.conf/etc/ld.so.conf.d/ldconfigLD_LIBRARY_PATHLD_RUN_PATH*/lib

ライブラリの追加を開始するとメンテナンスの複雑さが増すので、これを念頭に置いてください。

他のオプションは、リンク内のすべてのファイルをリンクすることです/usr/local/<library>/{bin,lib,include} into /usr/local/{bin,lib,include}。これは非常に単純化されld.so.confたりLD_LIBRARY_PATHLD_RUN_PATH混乱した状況の中で生きる必要があるかもしれません/usr/local/{bin,lib,include}

これを行う「公式」の方法は、システムのパッケージマネージャを使用し、選択した場所(など)に配布ライブラリのメンテナンス/usr/lib/バージョンをインストールすることです/lib

おすすめ記事