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 /
これに対する解決策は、ライブラリディレクトリ/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
など)にライブラリのディストリビューションのメンテナンスバージョンをインストールすることです。
(ライブラリではなく)実行可能ファイルの場合、ユーザーはPATH
を環境に正しく設定する必要があります。これは、独自のシェルスタートアップファイルを介して、または/etc/profile
などのシステム全体で実行できます(ただし、このファイルがすべての構成で読み取られるとは限りません)。
ここで、GMPやMPFRなどのライブラリーの場合:
ldconfig
(場合によっては/etc/ld.so.conf
)を使用するのが最善の解決策です。ただし、これらのライブラリに対してコンパイルする場合は、LIBRARY_PATH
およびCPATH
(またはC_INCLUDE_PATH
など)も必要です。注:LD_LIBRARY_PATH
は、一時的なもの(テストなど)や、ユーザーのホームディレクトリにインストールされたライブラリ(ユーザー側の構成ではldconfig
と同等ではないように見える)にも役立ちます。 。しかし、それは 実行パスを上書きする である場合があります。これは、場合によっては問題になります(たとえば、make check
で、ビルドされたばかりで、以前の互換バージョンがすでにインストールされているライブラリをチェックする場合) )。