OpenGL / GLUT - lots of undefined references
我从C ++(MinGW)中的GLUT开始使用OpenGL。 我已经尝试了很多GLUT文件,但是目前,我正在使用这些文件。 我已经按照它说的所有说明进行了操作,但是仍然出现这些错误(请参见输出)。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 | #include<windows.h> #include<GL/glut.h> #include<dos.h> // i know I shouldn't be using this 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(10, 10); glutInitWindowSize(800, 600); glutCreateWindow("Parmu Game Engine (Yes I didn't think of a better name.)"); // glutClearColor(0.0, 0.0, 0.0, 0.0); glutDisplayFunc(render); glutKeyboardFunc(keyboard); glutMouseFunc(mouse); glutMainLoop(); } void render(void) { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glBegin(GL_TRIANGLES); // ORIGIN AT CENTRE glColor3f(1, 0, 0); glVertex2f(0.3, 0.1); glColor3f(0, 1, 0); glVertex2f(0.8, 0.1); glColor3f(0, 0, 1); glVertex2f(0.5, 0.5); glEnd(); // glFlush(); glutSwapBuffers(); } void keyboard(unsigned char c, int x, int y) { if(c == 'q') exit(0); } void mouse(int button, int state, int x, int y) { if(button == GLUT_RIGHT_BUTTON) exit(0); } |
从cmd运行时的输出:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | E:\Workspace_CPP\Atom\Parmu_Game_Engine>g++ main.cpp C:\Users\Public\Documents\Wondershare\CreatorTemp/ccMBcaaa.o:main.cpp:(.text+0x1c): undefined reference to `__glutInitWithExit@12' C:\Users\Public\Documents\Wondershare\CreatorTemp/ccMBcaaa.o:main.cpp:(.text+0x3d): undefined reference to `__glutCreateWindowWithExit@8' C:\Users\Public\Documents\Wondershare\CreatorTemp/ccMBcaaa.o:main.cpp:(.text+0x5d): undefined reference to `__glutCreateMenuWithExit@8' C:\Users\Public\Documents\Wondershare\CreatorTemp/ccMBcaaa.o:main.cpp:(.text+0xaf): undefined reference to `glutInitDisplayMode@4' C:\Users\Public\Documents\Wondershare\CreatorTemp/ccMBcaaa.o:main.cpp:(.text+0xc6): undefined reference to `glutInitWindowPosition@8' C:\Users\Public\Documents\Wondershare\CreatorTemp/ccMBcaaa.o:main.cpp:(.text+0xdd): undefined reference to `glutInitWindowSize@8' C:\Users\Public\Documents\Wondershare\CreatorTemp/ccMBcaaa.o:main.cpp:(.text+0xfb): undefined reference to `glutDisplayFunc@4' C:\Users\Public\Documents\Wondershare\CreatorTemp/ccMBcaaa.o:main.cpp:(.text+0x10a): undefined reference to `glutKeyboardFunc@4' C:\Users\Public\Documents\Wondershare\CreatorTemp/ccMBcaaa.o:main.cpp:(.text+0x119): undefined reference to `glutMouseFunc@4' C:\Users\Public\Documents\Wondershare\CreatorTemp/ccMBcaaa.o:main.cpp:(.text+0x121): undefined reference to `glutMainLoop@0' C:\Users\Public\Documents\Wondershare\CreatorTemp/ccMBcaaa.o:main.cpp:(.text+0x13a): undefined reference to `glClear@4' C:\Users\Public\Documents\Wondershare\CreatorTemp/ccMBcaaa.o:main.cpp:(.text+0x149): undefined reference to `glBegin@4' C:\Users\Public\Documents\Wondershare\CreatorTemp/ccMBcaaa.o:main.cpp:(.text+0x16b): undefined reference to `glColor3f@12' C:\Users\Public\Documents\Wondershare\CreatorTemp/ccMBcaaa.o:main.cpp:(.text+0x184): undefined reference to `glVertex2f@8' C:\Users\Public\Documents\Wondershare\CreatorTemp/ccMBcaaa.o:main.cpp:(.text+0x1a6): undefined reference to `glColor3f@12' C:\Users\Public\Documents\Wondershare\CreatorTemp/ccMBcaaa.o:main.cpp:(.text+0x1bf): undefined reference to `glVertex2f@8' C:\Users\Public\Documents\Wondershare\CreatorTemp/ccMBcaaa.o:main.cpp:(.text+0x1e1): undefined reference to `glColor3f@12' C:\Users\Public\Documents\Wondershare\CreatorTemp/ccMBcaaa.o:main.cpp:(.text+0x1fa): undefined reference to `glVertex2f@8' C:\Users\Public\Documents\Wondershare\CreatorTemp/ccMBcaaa.o:main.cpp:(.text+0x202): undefined reference to `glEnd@0' C:\Users\Public\Documents\Wondershare\CreatorTemp/ccMBcaaa.o:main.cpp:(.text+0x207): undefined reference to `glutSwapBuffers@0' collect2: ld returned 1 exit status |
应当指出,我的代码没有使用任何IDE。 我使用了atom来编码,然后使用cmd来运行。
我已经在路径中包含了E:/ mingw / bin。
这些是我尝试过的命令:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | E:\Workspace_CPP\Atom\Parmu_Game_Engine>g++ main.cpp E:\Workspace_CPP\Atom\Parmu_Game_Engine>g++ main.cpp -lglut E:\Workspace_CPP\Atom\Parmu_Game_Engine>g++ main.cpp -lglut -lGLU E:\MinGW\bin\..\lib\gcc\mingw32\3.4.5\..\..\..\..\mingw32\bin\ld.exe: cannot find -lGLU collect2: ld returned 1 exit status E:\Workspace_CPP\Atom\Parmu_Game_Engine>g++ main.cpp -lglut -lGLU - lGL g++: lGL: No such file or directory g++: -E or -x required when input is from standard input E:\Workspace_CPP\Atom\Parmu_Game_Engine>g++ main.cpp -m32 E:\Workspace_CPP\Atom\Parmu_Game_Engine>g++ -c main.cpp -lglut32win g++: -lglut32win: linker input file unused because linking not done |
如此处所述,要链接的正确库是
-
opengl32.lib-Windows OpenGL API的导入库(使用
-lopengl32 )。 -
glu32.lib-Windows实现GLU的导入库(使用
-lglu32 )。 -
GLUT库不随Windows一起提供,因此它取决于您从何处获得GLUT for Windows。 在链接的版本中,您需要链接到glut32.lib,并确保在您的应用程序中包括glut32.dll。