2011-01-03 29 views
19

LinuxでC++実行可能ファイルをビルドします。実行可能ファイルはいくつかのブーストライブラリにリンクしています。共有ライブラリの読み込み中にエラーが発生しました:libboost_system.so.1.45.0:共有オブジェクトファイルを開くことができません:そのようなファイルまたはディレクトリがありません

私はバイナリを実行しようとすると、これが出力されます。

[email protected]:~/work/dev/c++/projects/testfgci/dist/Debug/GNU-Linux-x86$ ./testfgci 
./testfgci: error while loading shared libraries: libboost_system.so.1.45.0: cannot open shared object file: No such file or directory 

私は、依存関係を確認するために、バイナリ上でlddを実行します。

[email protected]:~/work/dev/c++/projects/testfgci/dist/Debug/GNU-Linux-x86$ ldd testfgci 
    linux-gate.so.1 => (0x00380000) 
    libboost_system.so.1.45.0 => not found 
    libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x00b50000) 
    libm.so.6 => /lib/tls/i686/cmov/libm.so.6 (0x005f6000) 
    libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x0099a000) 
    libc.so.6 => /lib/tls/i686/cmov/libc.so.6 (0x001b3000) 
    libpthread.so.0 => /lib/tls/i686/cmov/libpthread.so.0 (0x00110000) 
    /lib/ld-linux.so.2 (0x00ea2000) 

私はなぜliboos_system.slわかりません.1.45.0 SOが見つかりません。今日はもう少し早く成功しました。誰でも説明できますか?

+0

ビルドするとき、あなたは追加のリンカライブラリのコンパイラにフラグを渡していることは可能であるが、あなたがプログラムを実行する場合、Boostライブラリドン」:

は、これは私のために働いていたものですリンカーパスには存在しません。ライブラリの問題をリンクする可能性があります(http://stackoverflow.com/questions/4568187/linking-problem-in-libraries) – birryree

+1

答えが見つかりました。 LD_LIBRARY_PATHにパスを追加してエクスポートしなければなりませんでした。バイナリは実行されますが、エラーが報告されます(エラーシステム:9:ファイル記述子が不良です)。私はそれを反映するためにこの質問をするか、新しい質問をする必要があります – skyeagle

答えて

21

ライブラリが見つかりません。

ライブラリは、デフォルトで/lib,/usr/lib、および/etc/ld.so.confで指定されたディレクトリで検索されます。

通常、システムマネージャ(パッケージマネージャを使用してインストールした場合はboost)は/usr/libにありますが、おそらくあなたのケースではありません。

あなたのシステムにブーストライブラリがありますか?あなたは自分でそれをコンパイルしましたか?この場合、あなたは彼らがLD_LIBRARY_PATH環境変数を使用して位置しているディレクトリにライブラリを検索するために、ダイナミックリンカを教えてください:

LD_LIBRARY_PATH="your/boost/directory" ./testfgci 

私はとにかく、あなたのパッケージマネージャを使用してブーストライブラリをインストールすることをお勧めしたいですこれはあなたの人生をもっと簡単にします。

15

これは古いものですが、ldconfigを実行してldキャッシュを再構築できます。そうすれば、LD_LIBRARY_PATHを更新する必要はありません。

+1

ありがとうございました!!! – expert

3

私はちょうどUbuntuのユーザーのためのメモを追加したいと思います: これらのシステムは、LD_LIBRARY_PATHを消去するセキュリティ "機能"を持っています。 これは動作しません:/etc/environemntまたは~/.profileまたは~/.bash_profileのいずれかで

export LD_LIBRARY_PATH=/usr/local/boost_1_54_0/stage/lib:$LD_LIBRARY_PATH 

それは、~/.bashrcのために動作しますが、パスがちょうどこの特定の 対話型シェルのために設定されます。つまり、たとえばmakeを呼び出すとemacsまたはeclipse、 ランチャーからではなくシェルからemacsを起動しない限り、動作しません。

echo -e "\n/usr/local/boost_1_54_0/stage/lib" | sudo tee -a /etc/ld.so.conf 
sudo ldconfig 
関連する問題

 関連する問題