c ++ OpenGL未定义的引用

时间:2013-08-03 14:57:48

标签: c++ opengl ubuntu

我试图通过遵循tutorial

使用c ++让OpenGL在我的linux机器上运行

我使用的是Ubuntu 12.04 LTS。我有freeglut3-dev and mesa-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 ++
  2. 工作

    编辑如果我使用两个答案的组合证明它有效:具体我做了以下:

    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' and it worked! Please explain why putting - lGL and - “lGLU工作

3 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:1)

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

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

刚刚使用网站上的代码进行了测试,并且以下命令为我提供了一个可执行文件:

g++ -Wall -o cube main.cpp imageloader.cpp -lglut -lGLU

答案 2 :(得分:1)

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

我的答案是: 我的CMakeList.txt

开头的FIND_PACKAGE(OpenGL)

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