为 C++ 和 OpenGL 使用 Sublime Text 2
Posted
技术标签:
【中文标题】为 C++ 和 OpenGL 使用 Sublime Text 2【英文标题】:Using Sublime Text 2 for C++ and OpenGL 【发布时间】:2013-06-03 13:27:13 【问题描述】:我是在 Sublime Text 2 中通过 C++ 使用 OpenGL 编程和学习编码的新手。我有 javascript 经验,现在我正在使用 Sublime Text 2 和 MinGW 来编译 C++ 代码。它使用普通的 C++ 代码运行得很好,但是使用 OpenGL 它会返回问题。我已经在 MinGW 中安装了 GLUT。
例如: 我从 youtube 视频中找到了这个简单的代码:http://www.youtube.com/watch?v=SAmD_Aq1Un4
#include <GL/GLUT.h>
#include <iostream>
void render(void);
void keyboard(unsigned char c, int x, int y);
void mouse(int button, int state, int x, int y);
int main(int argc, char** argv)
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA);
glutInitWindowPosition(100, 100);
glutInitWindowSize(640, 480);
glutCreateWindow("Simple GLUT Application");
glutDisplayFunc(render);
glutKeyboardFunc(keyboard);
glutMouseFunc(mouse);
glutMainLoop();
void keyboard(unsigned char c, int x, int y)
if (c == 27)
exit(0);
void mouse(int button, int state, int x, int y)
if (button == GLUT_RIGHT_BUTTON)
exit(0);
void render(void)
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glBegin(GL_TRIANGLES);
glColor3f(1, 0, 0);
glVertex2f(-0.5, -0.5);
glColor3f(0, 1, 0);
glVertex2f(0.5, -0.5);
glColor3f(0, 0, 1);
glVertex2f(0.0, 0.5);
glEnd();
glutSwapBuffers();
当我构建文件时,它会显示以下内容:
C:\Users\HARIOM~1\AppData\Local\Temp\cc9WOgBg.o:openGL_Glut.cpp:(.text+0x1c): undefined reference to `__glutInitWithExit'
C:\Users\HARIOM~1\AppData\Local\Temp\cc9WOgBg.o:openGL_Glut.cpp:(.text+0x37): undefined reference to `__glutCreateWindowWithExit'
C:\Users\HARIOM~1\AppData\Local\Temp\cc9WOgBg.o:openGL_Glut.cpp:(.text+0x52): undefined reference to `__glutCreateMenuWithExit'
C:\Users\HARIOM~1\AppData\Local\Temp\cc9WOgBg.o:openGL_Glut.cpp:(.text+0x80): undefined reference to `glutInitDisplayMode'
C:\Users\HARIOM~1\AppData\Local\Temp\cc9WOgBg.o:openGL_Glut.cpp:(.text+0x94): undefined reference to `glutInitWindowPosition'
C:\Users\HARIOM~1\AppData\Local\Temp\cc9WOgBg.o:openGL_Glut.cpp:(.text+0xa8): undefined reference to `glutInitWindowSize'
C:\Users\HARIOM~1\AppData\Local\Temp\cc9WOgBg.o:openGL_Glut.cpp:(.text+0xc0): undefined reference to `glutDisplayFunc'
C:\Users\HARIOM~1\AppData\Local\Temp\cc9WOgBg.o:openGL_Glut.cpp:(.text+0xcc): undefined reference to `glutKeyboardFunc'
C:\Users\HARIOM~1\AppData\Local\Temp\cc9WOgBg.o:openGL_Glut.cpp:(.text+0xd8): undefined reference to `glutMouseFunc'
C:\Users\HARIOM~1\AppData\Local\Temp\cc9WOgBg.o:openGL_Glut.cpp:(.text+0xdd): undefined reference to `glutMainLoop'
C:\Users\HARIOM~1\AppData\Local\Temp\cc9WOgBg.o:openGL_Glut.cpp:(.text+0x130): undefined reference to `_imp__glClear'
C:\Users\HARIOM~1\AppData\Local\Temp\cc9WOgBg.o:openGL_Glut.cpp:(.text+0x13e): undefined reference to `_imp__glBegin'
C:\Users\HARIOM~1\AppData\Local\Temp\cc9WOgBg.o:openGL_Glut.cpp:(.text+0x15f): undefined reference to `_imp__glColor3f'
C:\Users\HARIOM~1\AppData\Local\Temp\cc9WOgBg.o:openGL_Glut.cpp:(.text+0x177): undefined reference to `_imp__glVertex2f'
C:\Users\HARIOM~1\AppData\Local\Temp\cc9WOgBg.o:openGL_Glut.cpp:(.text+0x198): undefined reference to `_imp__glColor3f'
C:\Users\HARIOM~1\AppData\Local\Temp\cc9WOgBg.o:openGL_Glut.cpp:(.text+0x1b0): undefined reference to `_imp__glVertex2f'
C:\Users\HARIOM~1\AppData\Local\Temp\cc9WOgBg.o:openGL_Glut.cpp:(.text+0x1d1): undefined reference to `_imp__glColor3f'
C:\Users\HARIOM~1\AppData\Local\Temp\cc9WOgBg.o:openGL_Glut.cpp:(.text+0x1e9): undefined reference to `_imp__glVertex2f'
C:\Users\HARIOM~1\AppData\Local\Temp\cc9WOgBg.o:openGL_Glut.cpp:(.text+0x1f0): undefined reference to `_imp__glEnd'
C:\Users\HARIOM~1\AppData\Local\Temp\cc9WOgBg.o:openGL_Glut.cpp:(.text+0x1f7): undefined reference to `glutSwapBuffers'
c:/mingw/bin/../lib/gcc/mingw32/4.7.2/../../../../mingw32/bin/ld.exe: C:\Users\HARIOM~1\AppData\Local\Temp\cc9WOgBg.o: bad reloc address 0x0 in section `.ctors'
c:/mingw/bin/../lib/gcc/mingw32/4.7.2/../../../../mingw32/bin/ld.exe: final link failed: Invalid operation
collect2.exe: error: ld returned 1 exit status
[Finished in 0.8s with exit code 1]
【问题讨论】:
这是一个常见问题解答。谷歌很快就找到了。您必须将 OpenGL 和 GLUT 库添加到链接器标志。 感谢您的回复,但您指的是哪个常见问题解答以及链接器标志是什么,请您详细说明一下。谢谢 常见问题解答见“常见问题”。它不在常见问题解答的特定列表中,这是一个经常被问到的问题。如果您还不知道链接器标志是什么,我强烈建议您阅读 GCC 工具链的精美手册:gcc.gnu.org/onlinedocs/gcc/Link-Options.html(MinGW 是 Windows 的 GCC 工具链)。 感谢您的回复 【参考方案1】:I c++,如果你想使用一个(在这个例子中是静态的)库,你必须链接它。用普通的英语,你必须告诉你的编译器在哪里可以找到库函数的实现。我不知道如何在您的编辑器中执行此操作,但通常有一些称为链接器设置的东西,您可以在其中链接项目所需的所有库。欲了解更多信息see this wiki page
【讨论】:
感谢您的回复,但这就是我要问的,几乎没有任何关于使用 c++ 的 sublime text 2 的文档。 @Surfer 那么我建议不要使用该编辑器。如果您正在尝试学习 c++,请使用众所周知的编辑器,以便人们能够更好地帮助您解决问题。我个人最喜欢的是Code::blocks。以上是关于为 C++ 和 OpenGL 使用 Sublime Text 2的主要内容,如果未能解决你的问题,请参考以下文章
如何开始在 openGL 和 C++ 中构建cooliris?