簡體   English   中英

C ++程序未正確鏈接到.so文件

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM