c – 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;

}

编译和链接命令:

gcc -o main.exe main.c -lglut32

结果:

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(3.7.6,名为glut32.lib)的实际lib文件位于mingw的lib文件夹和include / GL中的include文件中.

现在做什么?

解决方法:

尝试使用libglut.a和libglut32.a而不是glut32.lib.使用minGW编译过剩程序.

对于Win32,GLUT是原始GLUT库的Windows端口.它不再被维护或支持. MinGW“w32api”软件包已经附带了两个GLUT导入库,“libglut.a”和“libglut32.a”,但没有附带过量头文件.

如果您曾经从互联网上下载了一个GLUT标题,并尝试将这些应用程序与这些导入库中的任何一个链接起来,那么您可能会看到它因各种未定义的引用而失败.

Setting Up GLUT for Win32 With MinGW寻找使用MinGW为Win32设置GLUT

如果你想拥有自己的libglut32.a和glu32.dll“build”.

> Download Source glut-3.7.6-src.zip (4.76 MB)
> Download makefile
>进行以下修改:

从第12行开始,将以下行添加到include / GL / glut.h:

 #ifdef __MINGW32__
 #define APIENTRY __stdcall
 #define CALLBACK __stdcall
 #endif

在lib / glut / win32_winproc.c中注释第21行,使其看起来如下:

//#include <crtdbg.h>

makefile第5行替换:

-enable-auto-import with –enable-auto-import

跑去做

在使用MinGW设置GLUT for Win32的链接中的指导下尝试了它.

使用prebuild libs和自编译的libs.同时适用.

以下是结果.

示例GLUT应用程序

example.c来自上面的链接设置GLUT for Win32 With MinGW.

#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();
}
上一篇:c-使用mingw在Windows上编译libnoise


下一篇:c – mingw中的套接字编程