/ usr / bin / ld:找不到-lGL(Nvidia,(L)Ubuntu 12.10)

时间:2012-12-27 16:19:51

标签: opengl linker libraries ld ubuntu-12.10

我无法在C ++ / Qt5项目中链接OpenGL。我使用以下命令进行链接:

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 

我希望[...]没有隐藏重要的东西。如果你认为他们是,请告诉我。

我收到以下错误:

/usr/bin/ld: cannot find -lGL

我正在使用Lubuntu 12.10系统并使用http://qt-project.org/downloads中的Qt5。由于系统是新安装的,我做的第一件事就是安装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,而只会查找/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/后,一切正常。但似乎这不是正确的方式链接到默认路径中的库。

1 个答案:

答案 0 :(得分:3)

发行版通常将图形驱动程序的libGL安装到系统库路径中,但/usr/lib中的一些附加目录允许在同一系统上安装libGL.so的不同变体。然后,由某个集中配置系统创建到活动libGL.so的符号链接,例如Ubuntu和Debian使用的alternatives。很可能,这个配置步骤失败了。

/usr/lib/nvidia-current不是标准库路径,因此找不到库;这也应该意味着,OpenGL程序不应该工作。也许Ubuntu人员使用LD_LIBRARY_PATH环境变量做一些事情来绕过这个。

我个人建议您添加符号链接,因为您应该始终在默认库路径中libGL.so,优先/usr/lib/usr/lib64和{/usr/lib32中的32/64位多库系统1}}

/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系统执行此操作,添加新的替代方案。