【问题标题】:How to link OpenGL/glew/glfw on fedora/linux gcc++如何在 fedora/linux gcc++ 上链接 OpenGL/glew/glfw
【发布时间】:2016-03-04 18:46:53
【问题描述】:

所以我对 linux 还很陌生,并试图编译一个 openGL 项目,该项目在带有 GCC++ 的 CodeBlocks 中使用 GLEW 和 GLFW。

如下所示,我将链接器标志设置为 -lglfw -lGLEW -lGL,并尝试了各种排列,包括使用和不使用 -lGLU 的不同顺序。

这些都会导致链接器错误

找不到-lGL

或完整的构建日志

g++ -L/usr/lib64 -L/usr/lib -o Voxel .objs/Block.o ... other object files ... .objs/World.o   -lglfw -lGLEW -lGL
/usr/bin/ld: skipping incompatible /usr/lib/libGL.so when searching for -lGL
/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-redhat-linux/5.1.1/../../../libGL.so when searching for -lGL
/usr/bin/ld: skipping incompatible /lib/libGL.so when searching for -lGL
/usr/bin/ld: skipping incompatible /usr/lib/libGL.so when searching for -lGL
/usr/bin/ld: cannot find -lGL
collect2: error: ld returned 1 exit status

我发现 this 类似问题(以及许多其他论坛)并尝试了建议的操作,这些操作似乎暗示了不同的标志顺序和/或错误的符号链接(我不知道如何/如果我需要删除并重新添加)。

下面的命令确认我已经安装了 libGL。

dnf install libGL

我也试过

dnf install mesa-*

并安装了一些额外的软件包,但无济于事。

表演

locate libGL

给我以下内容

/usr/lib/libGL.la
/usr/lib/libGL.so
/usr/lib/libGL.so.1
/usr/lib/libGL.so.1.2.0
/usr/lib/libGL.so.358.16
/usr/lib/libGLESv1_CM.so
/usr/lib/libGLESv1_CM.so.1
/usr/lib/libGLESv1_CM.so.358.16
/usr/lib/libGLESv2.so
/usr/lib/libGLESv2.so.2
/usr/lib/libGLESv2.so.358.16
/usr/lib/libGLdispatch.so.0
/usr/lib64/libGL.la
/usr/lib64/libGL.so
/usr/lib64/libGL.so.1
/usr/lib64/libGL.so.358.16
/usr/lib64/libGLESv1_CM.so
/usr/lib64/libGLESv1_CM.so.1
/usr/lib64/libGLESv1_CM.so.358.16
/usr/lib64/libGLESv2.so
/usr/lib64/libGLESv2.so.2
/usr/lib64/libGLESv2.so.358.16
/usr/lib64/libGLEW.so
/usr/lib64/libGLEW.so.1.10
/usr/lib64/libGLEW.so.1.10.0
/usr/lib64/libGLEWmx.so
/usr/lib64/libGLEWmx.so.1.10
/usr/lib64/libGLEWmx.so.1.10.0
/usr/lib64/libGLU.so
/usr/lib64/libGLU.so.1
/usr/lib64/libGLU.so.1.3.1
/usr/lib64/libGLdispatch.so.0
/usr/share/doc/libGLEW
/usr/share/doc/libGLEWmx
/usr/share/doc/libGLEW/LICENSE.txt
/usr/share/doc/libGLEWmx/LICENSE.txt
/usr/share/licenses/mesa-libGL
/usr/share/licenses/mesa-libGLES
/usr/share/licenses/mesa-libGL/COPYING
/usr/share/licenses/mesa-libGLES/COPYING
/var/cache/PackageKit/metadata/updates/packages/mesa-libGL-11.0.6-1.20151122.fc23.x86_64.rpm
/var/cache/PackageKit/metadata/updates/packages/mesa-libGLES-11.0.6-1.20151122.fc23.x86_64.rpm

我正在运行 Fedora 23,并且有一个安装了专有 nVidia 驱动程序的 nVidia GeForce GTX 750Ti。

简而言之,如何在 Linux 上将 OpenGL、GLFW 和 GLEW 与 GCC++ 链接?

【问题讨论】:

标签: c++ linux opengl


【解决方案1】:

如果你有pkg-config,你也可以试试。它本身提供了适当的地址:

`pkg-config --cflags glfw3` -o myprog myprog.c `pkg-config --libs glfw3`

【讨论】:

    【解决方案2】:
    • 确保更新了 ld 缓存

    opengl@local:~/Development/Utilities$ sudo /sbin/ldconfig

    • 确保 ld 查看库

    opengl@local:~/Development/Utilities$ /sbin/ldconfig -p |排序-u | egrep --color='auto' 'lib(gl|GL)' libglapi.so.0 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libglapi.so.0 libGLESv2.so.2 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libGLESv2.so.2 libGLESv2.so (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libGLESv2.so libGLEW.so.1.10 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libGLEW.so.1.10 libglib-2.0.so.0 (libc6,x86-64) => /lib/x86_64-linux-gnu/libglib-2.0.so.0 libglib-2.0.so (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libglib-2.0.so libglibmm-2.4.so.1 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libglibmm-2.4.so.1 libglibmm_generate_extra_defs-2.4.so.1 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libglibmm_generate_extra_defs-2.4.so.1 libGL.so.1 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libGL.so.1 libGL.so (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libGL.so libGLU.so.1 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libGLU.so.1 libGLU.so (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libGLU.so libglut.so.3 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libglut.so.3 libglut.so (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libglut.so

    • 一如既往地使用 -L && -l 标志链接

    • 您也可以尝试使用cmake来简化开发过程:

    add_exacutable(... 查找库(... target_link_libraries(...

    【讨论】:

      【解决方案3】:

      在 linux 上,您应该链接到 dl。我从未使用过-lGL ......但我也从未使用过GLEW。您可能只需将 -lGL 替换为 -ldl。

      这是我在 linux 和 windows 上使用 GLFW(不带 GLEW)编译应用程序时使用的几行 cmake 脚本:

      target_link_libraries(myopengl_target glfw ${GLFW_LIBRARIES})
      if (${WIN32})
         find_library(OPENGL32_LIBRARY opengl32)
         target_link_libraries(myopengl_target opengl32 ${OPENGL32_LIBRARIES})
      elseif(${UNIX})
         target_link_libraries(myopengl_target dl)
      endif()
      

      【讨论】:

      • 我查看了 GLFW 站点,自从我上次下载 GLFW 源代码以来,构建说明似乎已经改变......所以如果我的解决方案对你有用,这可能意味着你有一个旧的 GLFW图书馆。
      【解决方案4】:

      我没有进行不为其输出着色的查找,而是在 lib64 文件夹中列出了一个目录,发现 libGL 有 3 个文件,其中一个与文件夹中的其他文件相比颜色很奇怪。

      (绿松石 - 符号链接)lib64.so.1 (绿色 - 文件)libGL.so.Version (黑底红字 - 孤立的符号链接)libGL.so

      此时我已经熟悉了 ln 命令的基础知识,并将符号链接设置为指向 libGL.so 使用

      ln -s libGL.so.Version libGL.so
      

      这解决了问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-07-26
        • 1970-01-01
        相关资源
        最近更新 更多