![](/img/trans.png)
[英]Mongodb : error while loading shared libraries: libboost_thread.so.1.54.0: > cannot open shared object file: No such file or directory
[英]error while loading shared libraries: libboost_system.so.1.45.0: cannot open shared object file: No such file or directory
我正在 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
,但它可能不是你的情況。
您的 boost 庫在您的系統上的什么位置? 你自己編譯的嗎? 在這種情況下,您應該告訴動態鏈接器使用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
,但路徑將僅為這個特定的交互式 shell 設置。 這意味着,如果您從emacs
或eclipse
調用make
,它將無法工作,除非您已從 shell 而不是從啟動器啟動emacs
。
這對我有用:
echo -e "\n/usr/local/boost_1_54_0/stage/lib" | sudo tee -a /etc/ld.so.conf
sudo ldconfig
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.