ライブラリをローカルのホームディレクトリにインストールするが、プログラムがライブラリを認識しない


10

非rootユーザーとしてサーバーにプログラムをインストールしています。具体的にはtmux 1.5ですが、私の考えでは、これはローカルにインストールされたすべてのプログラムに広く当てはまります(この問題が私自身のエラーではない場合に備えて、プログラム名について言及します)。

このプログラムでは、いくつかの依存ライブラリ(libeventやncursesなど)をインストールする必要があります。ルートアクセスがないため、ローカルにインストールしました。

cd $HOME/library/installation/folder
DIR=$HOME/local
./configure --prefix=$DIR 
#... make ... make install 

プログラムをインストールするには、ライブラリパッケージも含める必要がありました。

cd $HOME/program/installation/folder
./configure --prefix=$DIR CFLAGS="-I$DIR/include" LDFLAGS="-L$DIR/lib"
#... make ... make install 

これで、問題なくプログラムが$ HOME / local / binにインストールされますが、実行可能ファイル$ HOME / local / bin / tmuxを実行すると、次のエラーが発生します。

tmux:共有ライブラリの読み込み中にエラーが発生しました:libevent-2.0.so.5:共有オブジェクトファイルを開けません:そのようなファイルまたはディレクトリはありません

プログラムが目的のライブラリを見つけられないように思えますが、libevent-2.0.so.5ファイルは、実際には構成オプションで指定されている$ HOME / local / libに存在します。インストールされたライブラリを実行するためにプログラムにどのように認識させることができるのでしょうか。$ HOME / lib、$ HOME / bin、および$ HOME / local / binにシンボリックリンクを配置しようとしましたが、どれも機能しませんでした。どんなアイデアや提案も大歓迎です


私は仮定-R $DIR/libには、CFLAGS構築しながらであるtmux(とありませんlibevent)。これは、私を助けていない-それは認識できないと言っGCCからのいくつかの最終的なエラーが発生した-R(また、私は間にスペースなしにしようとした-Rとは$DIR)。./configure --disable-sharedこれは機能し、更新LD_LIBRARY_PATHも機能しました。私はlibevent上記の--disable-sharedオプションで再び作ることになりました。

回答:


20

使用してlibeventを再構築してみてください

./configure --disable-shared

ライブラリはバイナリの構築時にリンクされ、実行時に検索する必要がないため、これで問題が解決すると思います。

または、動的にリンクされたlibeventが必要な場合は、libevent-2.0.so.5を含むディレクトリをLD_LIBRARY_PATH環境変数に追加できます。

export LD_LIBRARY_PATH=${HOME}/local/lib/:${LD_LIBRARY_PATH}

うわー、迅速な返信をありがとうございました。LD_LIBRARY_PATHを使用して問題を修正しました。これは、将来のライブラリインストールにこの修正を適用するだけで、常に$ HOME / localディレクトリを使用できるためです。ヘルプに感謝します!
scicalculator 2011


2

他の人には運がありませんが、これは私にとってはうまくいきました、ここから:

sudo ln -s /usr/local/lib/libevent-2.0.so.5 /usr/lib64/libevent-2.0.so.5

2

私は同様の質問をしました。興味深いことにtmux、すべてのものの構築についても十分興味深いです(ただし、これがGNU configuremake一緒に使用されるあらゆる状況に関係していることは確かですが)。

よりクリーンなアプローチは、いわゆる「rpath」(バイナリに埋め込まれたライブラリ検索パス)を利用することだと思います。-rpath少なくともGNUリンカーのスイッチはldパスを指定します。

ビルドコマンドラインは次のようになります。

PKG_CONFIG_PATH=/path/to/libevent/lib/pkg-config LDFLAGS=-Wl,-rpath,/path/to/libevent/lib ./configure ...

ここでは、本当に最も重要ではなく、PKG_CONFIG_PATH上記単に人々がそうでない場合は、手動で送信達成何をする場合に推奨される方法である-L/path/to/libevent/lib -I/path/to/libevent/include./configureスクリプトを実行します。をビルドするとlibeventpkg-config(が使用する./configure)独自の構成ファイルがインストールされます。それに対して構築するときにどのスイッチを使用する必要があるかをlibevent 明確に知っているだけので、それを使用する必要があります。

とにかく、状況によって-rpathは、問題を解決するためのよりクリーンなアプローチです。

LD_LIBRARY_PATHただし、ベースのソリューションでは、ビルド時にバイナリが使用するライブラリを実行時に調整できますが、これは望ましい場合があります。しかし、ホームフォルダーのどこかに専用の場所に置いた特定のライブラリーに対してビルドしたいだけの場合、-rpathベースのソリューションは正解と見なすことだと思います。

奇妙なことに、tmux独自のビルドスクリプトは、ビルド中にライブラリ検索パスからこのパスを推測しないのです。多分彼らは必要とすべきではないし、すべきではないのか、私にはわかりません。構築した私たちにこれが起こったのは偶然tmuxですか?

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.