2017-07-15 105 views
1

我構建了GLEW(使用make install)在我正在編寫的一個小測試程序中使用(如果需要,可以找到源碼here)。我跑locate libGLEW.so只是爲了檢查是否安裝正確的GLEW庫,並得到了以下的輸出:C++程序沒有正確鏈接到.so文件

/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",果然:

libGLEW.so.2.0 => not found 

我最初以爲,這可能是與連接有問題不搜索包含庫的目錄。於是我就命令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 

我不知道究竟是什麼原因造成的問題,但我開始相信我沒有正確安裝庫。我覺得答案就在我眼前,但我找不到它。

在此先感謝您的幫助。

+0

'uname -a'表示什麼? –

+0

@JohnHinrichsen Linux TRASHTOPB 4.8.0-58-generic#63〜16.04.1-Ubuntu SMP Mon Jun 26 18:08:51 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux – WickedJet

回答

0

編譯-Wl,-rpath=/usr/lib64

+0

根據g ++,這些都不是有效的命令行選項。 – WickedJet

+0

這是一個單一的標誌:https://stackoverflow.com/questions/6562403/i-dont-understand-wl-rpath-wl – JRG

0

Debian和Ubuntu不安裝系統庫爲/usr/lib64,並且使用了安裝說明是錯誤的,這些系統。 (無論如何,繞過包裝系統安裝庫到/usr不是一個好主意。)默認搜索/usr/local/lib(與其他系統不同),因此您可以將庫移動到該目錄。

+0

我給了一個嘗試,但該程序仍然沒有正確鏈接到libGLEW.so。 2.0。我可以在不同的系統上嘗試這一點,以檢查它是否與我的電腦有問題。 – WickedJet

+0

什麼是新的錯誤信息? –

+0

和以前一樣,當我運行'ldd main'時,它沒有正確鏈接到libGLEW.so.2.0 – WickedJet