我想编译一个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 编译 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 文件。
使用预构建库 和自编译库。两者都有效。
下面是结果。
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/