如何使用GCC编译包含GLUT库的C语言文件?
问题原因
你遇到的两类报错对应两个不同问题:
- 第一类
undefined reference报错是因为编译时没有链接GLUT、OpenGL相关依赖库 - 第二类
cannot find -lxxx报错是因为MinGW环境下的OpenGL相关库命名和Linux不同,且你没有提前安装适配MinGW的GLUT库到对应路径
Windows MinGW 环境解决方案
- 第一步:安装适配的GLUT库
优先使用兼容原版GLUT的freeglut(原版GLUT已停止维护),下载对应32位MinGW的freeglut包后:- 把GLUT相关头文件放入MinGW安装路径下的
include/GL目录 - 把
.a格式的库文件放入MinGW安装路径下的lib目录 - 把
.dll格式的动态库放入MinGW安装路径下的bin目录,或者后续生成exe的同级运行目录
- 把GLUT相关头文件放入MinGW安装路径下的
- 第二步:使用正确的编译命令
MinGW环境下OpenGL相关库命名和Linux不同,不要用-lGL这类参数,完整编译命令如下:
gcc main.c -o test -lfreeglut -lglu32 -lopengl32 -lwinmm -lgdi32
如果使用的是原版GLUT,把参数里的-lfreeglut换成-lglut32即可。
如果你的GLUT头文件、库文件没有放在MinGW的系统目录,需要手动指定路径:
gcc main.c -o test -I<你的GLUT头文件所在目录路径> -L<你的GLUT库文件所在目录路径> -lfreeglut -lglu32 -lopengl32 -lwinmm -lgdi32
- 第三步:VLA支持确认
MinGW的GCC默认支持C99及之后标准的VLA特性,无需额外配置,如果遇到VLA相关报错,可以加-std=c99或者-std=c11参数开启对应C标准支持。
Mac 环境解决方案
Mac系统的OpenGL、GLUT以Framework形式存在,终端编译时不要用Linux风格的链接参数,使用Framework参数即可,完整命令如下:
gcc main.c -o test -framework GLUT -framework OpenGL
Mac下的GCC实际调用的是Clang,编译.c后缀文件时默认走C语言标准,完全支持VLA特性,和Xcode自带构建效果一致。
内容的提问来源于stack exchange,提问作者Jack Freeth
相关产品推荐
相关产品推荐

