(我想使這個問題儘可能的通用,所以我會省略名稱圖書館,給了我標題問題。)程序錯誤:./program:錯誤而載入共享庫:LIB <xxx>的.so:無法打開共享對象文件:沒有這樣的文件或目錄
我有一個項目,併爲該項目,我需要一個圖書館xxx。因此,我下載了該庫,使用默認命令(./configure && make && make install && make clean
)進行編譯 - 安裝過程已記錄 - 如果文檔中給出的示例用於查看是否正確設置了所有內容,則嘗試嘗試。我複製並粘貼在.c文件的代碼,並用下面的命令編譯它:
gcc -o program program.c -lxxx
和GCC沒有報告任何錯誤。然而,當我運行程序時,會出現以下錯誤:
./program: error while loading shared libraries: lib<xxx>.so: cannot open shared object file: No such file or directory
是到了我的心是用-static gcc的選項的第一個解決方案。它運行良好,程序正常運行。但我感到失望,因爲這意味着圖書館「嵌入」在程序中(抱歉在這裏錯誤的術語:我只是一個學生)。
於是,我找了在堆棧溢出的解決方案:這是我的發現:error while loading shared libraries: libnsd.so: cannot open shared object file: No such file or directory
圖書館是不同的,但使用命令
export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH
工作的罰款。實際上,libxxx.so位於/ usr/local/lib(僅通過使用ls /usr/local/lib | grep xxx
)。另外,永久的解決方案線程顧名思義就是在文件/etc/ld.so.conf寫的目錄名稱:
sudo echo "/usr/local/lib" >> /etc/ld.so.conf
sudo ldconfig
這就是棘手的問題:ld.so.conf中文件包含以下行
include /etc/ld.so.conf.d/*.conf
和目錄內/etc/ld.so.conf.d有一個名爲libc.conf包含行
/usr/local/lib
我有點困惑,其中包括;如果它的工作方式與C#中的#include一樣,我應該在/etc/ld.so.conf文件中包含/ usr/local/lib。看起來並非如此。
你安裝庫後運行'rehash'嗎? –
該問題與C無關。 – alk
[man ldconfig](https://linux.die.net/man/8/ldconfig) –