2012-12-27 32 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