opengl -/usr/bin/ld : cannot find -lGL (Nvidia, (L)Ubuntu 12.10)

标签 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/后,一切正常。但这似乎不是链接默认路径中的库的正确方法

最佳答案

发行版通常不会将图形驱动程序的 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

中的 multilib 系统
/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/

相关文章:

python - conda安装boost后,libboost_python.lib和boost_python.lib有什么区别

cocoa - Mac 上的 OpenGL 操作

opengl - 如何将常量数据发送到着色器?

macos - 我如何告诉链接器使用方法的多个实现中的哪一个?

macos - 如何解决我在尝试将 C++ 与 Assembly 链接时遇到的这个链接器错误?

Android 图形库,创建消息框

dart - 通过Dart中的另一个库加载时,无法访问一个库的顶级例程

opengl - 奇怪的sdl opengl链接器

c++ - 围绕当前位置旋转矩阵的快速方法

c - 链接器错误内联函数