我无法在我的 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/
后,一切正常。但这似乎不是链接默认路径中的库的正确方法。
最佳答案
发行版通常不会将图形驱动程序的 libGL 安装到系统库路径中,而是安装在 /usr/lib
中的一些附加目录中,以允许安装 libGL.so< 的不同变体
在同一系统上。然后,某些集中配置系统会创建指向事件 libGL.so
的符号链接(symbolic link),例如 Ubuntu 和 Debian 使用的 alternatives
。此配置步骤很可能失败。
/usr/lib/nvidia-current
不是标准库路径,因此找不到该库;这也意味着 OpenGL 程序不应该工作。也许 Ubuntu 人员会使用 LD_LIBRARY_PATH 环境变量来规避这个问题。
我个人建议您添加符号链接(symbolic link),因为默认库路径中应该始终有 libGL.so
,最好是 /usr/lib
或在 32/64 位上/usr/lib64
和 /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
您还可以使用替代方案
系统来添加新的替代方案来执行此操作。
关于opengl -/usr/bin/ld : cannot find -lGL (Nvidia, (L)Ubuntu 12.10),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14057737/