[英]C++ program not linking to .so file properly
我構建了GLEW(使用make install
)以在我正在編寫的小型測試程序中使用(如果需要,可以在這里找到源代碼)。 我運行了locate libGLEW.so
只是為了檢查GLEW庫是否已正確安裝,並獲得以下輸出:
/usr/lib64/libGLEW.so
/usr/lib64/libGLEW.so.2.0
/usr/lib64/libGLEW.so.2.0.0
這是完全正常的。 然后,我使用以下命令對其進行編譯:
g++ main.cpp -o main -lglfw -lGLEW -lGL -lX11 -lpthread -lXi -g
這也不會引發任何錯誤。 但是,當我嘗試執行程序時:
./main: error while loading shared libraries: libGLEW.so.2.0: cannot open shared object file: No such file or directory
我只是為了進行健全性檢查而運行了ldd main | grep "GLEW"
ldd main | grep "GLEW"
,果然:
libGLEW.so.2.0 => not found
最初,我認為鏈接器不搜索包含庫的目錄可能是一個問題。 所以我運行了命令ld --verbose | grep "/usr/lib64"
ld --verbose | grep "/usr/lib64"
並且有包含所需目錄SEARCH_DIR:
... SEARCH_DIR("=/usr/lib64"); ...
這尤其令人困惑。 我嘗試使用-L/usr/lib64
選項進行編譯,但是相同的錯誤消息仍然存在。 我檢查到庫的符號鏈接是否正確,它們是:
lrwxrwxrwx 1 root root 16 Jul 15 10:22 libGLEW.so -> libGLEW.so.2.0.0
lrwxrwxrwx 1 root root 16 Jul 15 10:38 libGLEW.so.2.0 -> libGLEW.so.2.0.0
-rw-r--r-- 1 root root 707K Jul 15 10:22 libGLEW.so.2.0.0
我不確定到底是什么引起了該問題,但是我開始相信我沒有正確安裝這些庫。 我覺得答案就在我眼前,但找不到。
在此先感謝您的幫助。
Debian和Ubuntu不會將系統庫安裝到/usr/lib64
,並且您使用的安裝說明對於這些系統是錯誤的。 (將庫繞過打包系統安裝到/usr
並不是一個好主意。) /usr/local/lib
是默認搜索的(與其他系統不同),因此可以將庫移動到該目錄。
用-Wl,-rpath=/usr/lib64
編譯
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.