C++ GLUT程序链接错误

C++ GLUT程序链接错误,c++,mingw,glut,C++,Mingw,Glut,我想编译一个GLUT程序 #include <GL/glut.h> int main(int argc, char **argv) { // init GLUT and create Window glutInit(&argc, argv); glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA); glutInitWindowPosition(100,100); glut

我想编译一个GLUT程序

#include <GL/glut.h>

int main(int argc, char **argv) {

    // init GLUT and create Window
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA);
    glutInitWindowPosition(100,100);
    glutInitWindowSize(320,320);
    glutCreateWindow("Lighthouse3D- GLUT Tutorial");

    return 1;

}
结果:

main.o:main.c:(.text.startup+0x1c): undefined reference to `glutInit'
main.o:main.c:(.text.startup+0x28): undefined reference to `glutInitDisplayMode'
main.o:main.c:(.text.startup+0x3c): undefined reference to `glutInitWindowPosition'
main.o:main.c:(.text.startup+0x50): undefined reference to `glutInitWindowSize'
main.o:main.c:(.text.startup+0x5c): undefined reference to `glutCreateWindow'
collect2: ld returned 1 exit status        
glut的实际lib文件(3.7.6,称为glut32.lib)位于mingw的lib文件夹中,include/GL中的include文件


现在该怎么办

尝试使用
libglut.a
libglut32.a
而不是
glut32.lib
。使用minGW编译glut程序。

Win32的Do GLUT是原始GLUT库的Windows端口。它不再被维护或支持。MinGW“w32api”包已经提供了两个GLUT导入库,“libglut.a”“libglut32.a”,但是没有GLUT头文件。

如果您曾经从internet下载过GLUT头,并尝试将应用程序链接到这些导入库中的任何一个,您可能会看到它在各种未定义引用的情况下失败

查找
使用MinGW为Win32设置GLUT

如果您想拥有自己的liblut32.a和glu32.dll的“构建”。

  • 进行以下修改:
从第12行开始,添加以下行以包括/GL/glut.h:

 #ifdef __MINGW32__
 #define APIENTRY __stdcall
 #define CALLBACK __stdcall
 #endif
注释掉lib/glut/win32_winproc.c中的第21行,使其看起来:

//#include <crtdbg.h>

UH如果是,请使用,因为它实际上是维护的。这有帮助吗。看起来您需要
g++-mwindows glut32.lib
或者更好,不要使用GLUT。例如,尝试SDL.SDL和3d?如果有带着色器的3d渲染器,为什么要这样做?
//#include <crtdbg.h>
#include <stdlib.h>
#include <GL/glut.h>

void keyboard(unsigned char key, int x, int y);
void display(void);


int main(int argc, char** argv)
{
  glutInit(&argc, argv);
  glutCreateWindow("GLUT Test");
  glutKeyboardFunc(&keyboard);
  glutDisplayFunc(&display);
  glutMainLoop();

  return EXIT_SUCCESS;
}


void keyboard(unsigned char key, int x, int y)
{
  switch (key)
  {
    case '\x1B':
      exit(EXIT_SUCCESS);
      break;
  }
}


void display()
{
  glClear(GL_COLOR_BUFFER_BIT);

  glColor3f(1.0f, 0.0f, 0.0f);

  glBegin(GL_POLYGON);
    glVertex2f(-0.5f, -0.5f);
    glVertex2f( 0.5f, -0.5f);
    glVertex2f( 0.5f,  0.5f);
    glVertex2f(-0.5f,  0.5f);
  glEnd();

  glFlush();
}