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が見つからない理由がわかりません。今日は少し早い段階で正常にビルドしました。誰でも説明できますか?
ライブラリが見つかりません。
ライブラリは、デフォルトで/lib
、/usr/lib
、および/etc/ld.so.conf
で指定されたディレクトリで検索されます。
通常、システムライブラリ(パッケージマネージャを介してインストールした場合のboostなど)は/usr/lib
にありますが、おそらくそうではありません。
ブーストライブラリはシステムのどこにありますか?自分でコンパイルしましたか?この場合、LD_LIBRARY_PATH
環境変数を使用して、ライブラリが配置されているディレクトリでライブラリを探すようにダイナミックリンカーに指示する必要があります。
LD_LIBRARY_PATH="your/boost/directory" ./testfgci
とにかく、パッケージマネージャーを使用してboostライブラリをインストールすることをお勧めします。これにより、作業が大幅に簡素化されます。
これは古いものであることはわかっていますが、ldconfig
を実行してldキャッシュを再構築できます。そうすれば、更新する必要はありませんLD_LIBRARY_PATH
。
私は、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