web-dev-qa-db-ja.com

ldconfigおよびld.so.confとLD_LIBRARY_PATHの使用

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.
_

_ldconfig and ld.so.conf_と_LD_LIBRARY_PATH_、およびPATHを使用するよりも、_LD_RUN_PATH_を使用するより良い方法、またはより公式な方法?がありますか?これは特に自分のコードを書くためのものですが、gmp、mpfrなどの特定のLinuxバージョンでインストールされているものよりも新しいライブラリのさまざまなバージョンに対してリンクし、さまざまな手動でインストールされたバージョンを使用する他のユーザーの場合もあります。 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/lib64 /

6
ron

これに対する解決策は、ライブラリディレクトリ/usr/local/gcc-7.3.0/lib//etc/ld.so.conf(または/etc/ld.so.conf.d/内のファイル)に追加し、ldconfigを実行するか、システムを上書きするようにユーザーのシェルプロファイルを変更することです。 'LD_LIBRARY_PATH/LD_RUN_PATHおよび個々の*/libエントリを追加して、リンカーが共有オブジェクトを見つけられるようにします。

ライブラリを追加し始めると、これを維持するための複雑さが増すので、注意してください。

もう1つのオプションは、/usr/local/<library>/{bin,lib,include} into /usr/local/{bin,lib,include}のすべてのファイルをリンクすることです。これはld.so.confまたはLD_LIBRARY_PATH/LD_RUN_PATHを大幅に簡略化しますが、厄介な/usr/local/{bin,lib,include}を使用する必要があります。

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

1
Pedro

(ライブラリではなく)実行可能ファイルの場合、ユーザーはPATHを環境に正しく設定する必要があります。これは、独自のシェルスタートアップファイルを介して、または/etc/profileなどのシステム全体で実行できます(ただし、このファイルがすべての構成で読み取られるとは限りません)。

ここで、GMPやMPFRなどのライブラリーの場合:

  1. GCCをビルドするときに実行パスを使用した場合、GCCを使用できるようにするために他に何もする必要はありません。ライブラリは実行パスを介して見つかります。
  2. それ以外の場合、またはユーザーがライブラリを他の目的で(たとえば、独自のソフトウェアで)直接使用できるようにしたい場合は、ldconfig(場合によっては/etc/ld.so.conf)を使用するのが最善の解決策です。ただし、これらのライブラリに対してコンパイルする場合は、LIBRARY_PATHおよびCPATH(またはC_INCLUDE_PATHなど)も必要です。

注:LD_LIBRARY_PATHは、一時的なもの(テストなど)や、ユーザーのホームディレクトリにインストールされたライブラリ(ユーザー側の構成ではldconfigと同等ではないように見える)にも役立ちます。 。しかし、それは 実行パスを上書きする である場合があります。これは、場合によっては問題になります(たとえば、make checkで、ビルドされたばかりで、以前の互換バージョンがすでにインストールされているライブラリをチェックする場合) )。

0
vinc17