2012-12-27 45 views
2

我無法在我的C++/Qt5項目中與OpenGL鏈接。我鏈接使用以下命令:/usr/bin/ld:無法找到-lGL(Nvidia,(L)Ubuntu 12.10)

g++ -m64 -Wl,[...] -o [...] [...].o        \ 
    -L/usr/X11R6/lib64 -L[...]/qt-5.0.0/5.0.0/gcc_64/lib   \ 
    -lQt5Widgets -lQt5Network -lQt5Gui -lQt5Core -lGL -lpthread 

我希望[...]沒有隱藏一些重要的東西。如果你認爲他們是,請讓我知道。

我得到以下錯誤:一個Lubuntu 12.10系統上

/usr/bin/ld: cannot find -lGL 

我使用QT5從http://qt-project.org/downloads。由於系統是新安裝的,我所做的第一件事就是安裝Ubuntu的nvidia-current軟件包並重新啓動。其中,以下庫已經安裝在我的系統:

$ ll /usr/lib/nvidia-current/ 
[...] 
lrwxrwxrwx 1 root root  10 Oct 6 04:58 libGL.so -> libGL.so.1 
lrwxrwxrwx 1 root root  15 Oct 6 04:58 libGL.so.1 -> libGL.so.304.43 
-rw-r--r-- 1 root root 1076560 Oct 6 04:58 libGL.so.304.43 
[...] 

我如何將此路徑添加到默認的庫搜索路徑,因爲我猜g++不看在子文件夾nvidia-current但只用Google搜索在/usr/lib。所以我在Ubuntu中添加了ld.conf.d的路徑。我更新了ldconfig並使用以下命令進行了檢查:

$ ldconfig -p | grep libGL.so 
     libGL.so.1 (libc6,x86-64) => /usr/lib/nvidia-current/libGL.so.1 
     libGL.so.1 (libc6) => /usr/lib32/nvidia-current/libGL.so.1 
     libGL.so (libc6,x86-64) => /usr/lib/nvidia-current/libGL.so 
     libGL.so (libc6) => /usr/lib32/nvidia-current/libGL.so 

所以一切看起來都很好! 仍然(即使重新啓動後),出現上面的錯誤。我錯過了什麼嗎?

編輯:

加入-L/usr/lib/nvidia-current/之後,一切工作正常。但似乎這不是正確的方式鏈接到默認路徑中的庫。

回答

3

發行版通常會將圖形驅動程序的libGL安裝到系統庫路徑中,但在/usr/lib中有一些附加目錄允許在同一系統上安裝不同的libGL.so變體。然後,通過一些集中式配置系統創建到活動libGL.so的符號鏈接,例如Ubuntu和Debian使用的alternatives。很可能,這個配置步驟失敗了。

/usr/lib/nvidia-current不是標準的庫路徑,因此找不到庫;這也意味着,OpenGL程序不應該工作。也許Ubuntu的人會用LD_LIBRARY_PATH環境變量來解決這個問題。

我個人建議你添加符號鏈接,你應該總是在defaul庫路徑libGL.so,preferrably /usr/lib/usr/lib64在32/64位multilib的系統和/usr/lib32

/usr/lib/libGL.so.1 => /usr/lib/nvidia-current/libGL.so.1 
/usr/lib32/libGL.so.1 => /usr/lib32/nvidia-current/libGL.so.1 
/usr/lib/libGL.so => /usr/lib/nvidia-current/libGL.so 
/usr/lib32/libGL.so => /usr/lib32/nvidia-current/libGL.so 

你也可以做到這一點使用alternatives系統,添加一個新的選擇。

+0

這節省了我在x64系統上的一些時間(名稱有點不同,但沒關係),謝謝! – mlvljr