1

我正在尝试按照本教程使用 c++ 让 OpenGL 在我的 linux 机器上工作

我正在使用 Ubuntu 12.04 LTS。我有两个包 freeglut3-devmesa-common-dev我安装的sudo apt-get install package-name1 package-name2

只是为了确保我去了推荐的目录/usr/include/GL并列出了文件ls

freeglut_ext.h  freeglut.h  freeglut_std.h  glext.h  gl.h  gl_mangle.h  glu.h  glu_mangle.h  glut.h  glxext.h  glx.h  glx_mangle.h  internal

我注意到我确实有gl.hglut.h所以我按照教程的推荐测试了示例程序。我下载了 zip 文件,将文件解压缩到同一目录中,然后运行该make实用程序。这是运行后的一些输出make

g++ -Wall -o cube main.cpp imageloader.cpp -lglut
imageloader.cpp: In function ‘Image* loadBMP(const char*)’:
imageloader.cpp:141:2: warning: suggest parentheses around ‘&&’ within ‘||’ [-Wparentheses]
/tmp/ccWT2wvp.o:main.cpp:function loadTexture(Image*): error: undefined reference to 'glGenTextures'
/tmp/ccWT2wvp.o:main.cpp:function loadTexture(Image*): error: undefined reference to 'glBindTexture'
/tmp/ccWT2wvp.o:main.cpp:function loadTexture(Image*): error: undefined reference to 'glTexImage2D'

我得到了大约 20 个其他未定义的参考错误。因此,一定是我没有正确安装某些东西,或者缺少文件。我确实注意到我通过运行检查了硬件加速信息,glxinfo并且我确实有硬件加速。

  1. 如何让 OpenGL 使用 C++ 工作

编辑如果我使用这两个答案的组合证明它是有效的:具体来说,我做了以下事情:

someonespc:~/c++$ ls
imageloader.cpp  imageloader.h  main.cpp  Makefile  Makefile~  vtr.bmp
d2b2@d2b2-Aspire-7745G:~/c++$ g++ -Wall -lGL -o cube main.cpp imageloader.cpp -lglut -lGLU
imageloader.cpp: In function ‘Image* loadBMP(const char*)’:
imageloader.cpp:141:2: warning: suggest parentheses around ‘&&’ within ‘||’ [-Wparentheses]
someonespc:~/c++$ ls
cube  imageloader.cpp  imageloader.h  main.cpp  Makefile  Makefile~  vtr.bmp

然后我跑了./cube,它奏效了!请解释为什么投入-lGL-lGLU工作

4

3 回答 3

6

添加-lGL到 gcc 命令行选项。它告诉链接器可以在其中找到函数libGL.so(这是指向 的链接libGL.so.1)。

于 2013-08-03T14:59:39.520 回答
1

我曾经在我的 Ubuntu 上编写一些 OpenGL 代码,在检查 makefile 时,我到处都有两个库链接。(过剩和 GLU)

请注意,大写在 linux 系统上很重要,因为它将查找文件 libGLU.so

刚刚用网站上的代码进行了测试,下面的命令给了我一个可执行文件:

g++ -Wall -o cube main.cpp imageloader.cpp -lglut -lGLU
于 2013-08-03T15:07:26.433 回答
1

我在使用 Cmake 的 Ubuntu 14.04 上遇到了同样的错误

我的答案是在我的 CMakeList.txt 开头添加:FIND_PACKAGE(OpenGL)

并添加: ${OPENGL_gl_LIBRARY} 到 target_link_libraries() 列表的末尾

于 2016-12-08T22:47:37.620 回答