私はしばしば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.conf
than using LD_LIBRARY_PATH
and 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/
ldconfig
LD_LIBRARY_PATH
LD_RUN_PATH
*/lib
ライブラリの追加を開始するとメンテナンスの複雑さが増すので、これを念頭に置いてください。
他のオプションは、リンク内のすべてのファイルをリンクすることです/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
。
答え2
実行可能ファイル(ライブラリとは逆)の場合、ユーザーはPATH
その環境で正しい設定を持っている必要があります。これは、独自のシェル起動ファイルやviaなどのシステム全体の起動ファイルを介して実行できます/etc/profile
(ただし、このファイルはすべての設定で読み取ることができるわけではありません)。
GMPやMPFRなどのライブラリの場合:
- GCCをビルドするときに実行パスを使用した場合は、GCCを使用するために他のタスクを実行する必要はありません。ライブラリは実行パスを通して見つけることができます。
- そうでない場合、またはユーザーが他の目的(例えば、独自のソフトウェアを使用する)でライブラリを直接使用できるようにするには、おそらく
ldconfig
使用するのが/etc/ld.so.conf
最善の解決策です。ただし、ユーザーがこれらのライブラリをコンパイルするにはLIBRARY_PATH
(またはCPATH
などC_INCLUDE_PATH
)も必要です。
注:一時アイテム(テストなど)やユーザーホームディレクトリにインストールされているライブラリ(ユーザー側の設定LD_LIBRARY_PATH
に対応するものはないようです)にはまだ役立ちます。ldconfig
しかしそれは可能です。実行パスのオーバーライド、これは場合によっては問題になる可能性があります(たとえば、ビルドmake check
されたライブラリと以前の互換バージョンがすでにインストールされているライブラリを確認するなど)。