Windows下Cygwin64执行make编译C代码出现cpuset.h、errno相关报错如何解决
问题原因
- 编译参数携带
-ansi:该参数强制编译器遵循C89标准,而C89标准不支持//格式的单行注释。Cygwin提供的/usr/include/sys/cpuset.h头文件中大量使用//注释,编译时注释内容被识别为有效代码,导致宏定义展开失败,抛出语法错误。 - 头文件路径冲突:你当前使用的是MinGW架构的交叉编译器
x86_64-w64-mingw32-gcc,但编译参数手动添加了-I /usr/include,该路径是Cygwin原生环境的头文件目录,和MinGW编译器自带的头文件产生冲突,进而触发errno重定义的警告。
解决方法
- 调整C标准编译参数:如果项目没有强制兼容C89的要求,直接修改Makefile中的CFLAGS配置,删除
-ansi参数即可。如果必须使用C89标准,可以将-ansi替换为-std=c89 -pedantic -Wno-comment,忽略单行注释的语法检查。 - 移除错误的头文件路径配置:删除编译参数中的
-I /usr/include,MinGW编译器会自动加载自身适配的头文件路径,不需要手动指定Cygwin原生头文件目录,即可解决头文件冲突问题。 - 检查依赖安装:如果调整后仍提示依赖缺失,需要安装前缀为
mingw64-x86_64-的MinGW版本依赖包,不要使用Cygwin原生的依赖包,两类依赖不兼容。
内容的提问来源于stack exchange,提问作者rage0920
相关产品推荐
相关产品推荐

