我正在尝试通过遵循此tutorial使OpenGL在使用c++的Linux机器上工作
我正在使用Ubuntu 12.04 LTS。我同时拥有freeglut3-dev
安装的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.h
和glut.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
检查了硬件加速信息,并且确实具有硬件加速。编辑如果我同时使用这两个答案,则证明它可行:具体来说,我做了以下工作:
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
可以工作 最佳答案
将-lGL
添加到gcc命令行选项。它告诉链接器函数可以在libGL.so
(这是libGL.so.1
的链接)中找到。