c++ - 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);
    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.alibglut32.a 而不是 glut32.lib。用 minGW 编译 glut 程序。

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

如果您曾经从互联网上下载过 GLUT header ,并尝试将应用程序链接到这些导入库中的任何一个,您可能会看到它因各种 undefined reference 而失败。

Setting Up GLUT for Win32 With MinGW寻找 Setting Up GLUT for Win32 With MinGW

如果您想要自己“构建”libglut32.a 和 glu32.dll。

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

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

注释掉 lib/glut/win32_winproc.c 中的第 21 行,使其看起来为:

//#include <crtdbg.h>

makefile 第 5 行替换:

-enable-auto-import--enable-auto-import

运行制作


已尝试使用链接 Setting Up GLUT for Win32 With MinGW 中的指南中的 example.c 文件。

使用预构建库自编译库。两者都有效。

下面是结果。

enter image description here

GLUT 应用示例

example.c 来自上面的链接使用 MinGW 为 Win32 设置 GLUT

#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++ - GLUT程序链接错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12919277/

相关文章:

c++ - 使用 SDL 项目调试错误 "no source available for main()"

c++ - N 叉树实现 : cannot convert 'Tree::node*' to 'node*' in assignment

c++ - 从 glutMainLoop() 中调用函数

c - 在openGL程序中实现太阳能系统中的方向键

c++ - 返回简历 :Mat pointer to main function

c++ - 我已经阅读了很多有关2d数组的信息,但是在分配作业时遇到了麻烦

c++ - WSO2 C++ 客户端应用程序在调用 Environment::initialize 方法时崩溃

c++ - 从 Sublime Text 2 构建后以 cmd 模式运行程序

qt - 为 Qt + OpenGL + GLUT + GLEW 应用程序创建安装程序

c++ - 如何使用 WIN32 和 C++ 通过套接字发送 HBITMAP?