web-dev-qa-db-ja.com

共有ライブラリのロード中にエラーが発生しました:libboost_system.so.1.45.0:共有オブジェクトファイルを開けません:そのようなファイルまたはディレクトリはありません

LinuxでC++実行可能ファイルを構築しています。実行可能ファイルは、いくつかのboostライブラリにリンクします。

これは、バイナリを実行しようとしたときの出力です。

root@yourbox:~/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を実行して、依存関係を確認します。

root@yourbox:~/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が見つからない理由がわかりません。今日は少し早い段階で正常にビルドしました。誰でも説明できますか?

25
skyeagle

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

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

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

ブーストライブラリはシステムのどこにありますか?自分でコンパイルしましたか?この場合、LD_LIBRARY_PATH環境変数を使用して、ライブラリが配置されているディレクトリでライブラリを探すようにダイナミックリンカーに指示する必要があります。

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

とにかく、パッケージマネージャーを使用してboostライブラリをインストールすることをお勧めします。これにより、作業が大幅に簡素化されます。

27
peoro

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

20
ontek

私は、Ubuntu(およびDebian、おそらく)のユーザー向けのメモを追加したかっただけです。これらのシステムには、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
6
abo-abo