2

我无法在我的 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. 所以我ld.conf.d在Ubuntu中添加了路径。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/,一切正常。但这似乎不是在默认路径中链接库的正确方法。

4

1 回答 1

3

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

/usr/lib/nvidia-current不是标准库路径,因此找不到该库;这也应该意味着,OpenGL 程序不应该工作。也许 Ubuntu 的人对环境变量做了一些事情LD_LIBRARY_PATH来规避这个问题。

我个人建议您添加符号链接,因为您应该始终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

您也可以使用alternatives系统执行此操作,添加新的替代方案。

于 2012-12-27T17:14:50.687 回答