You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用mingw-w64 v12交叉编译报错,v9.3可正常编译

解决mingw-w64 v12与argtable-2.13的EOVERFLOW枚举冲突问题

核心原因

mingw-w64 v12的errno.h新增了POSIX标准的EOVERFLOW枚举定义,而argtable-2.13代码中自行定义了同名枚举,导致编译时符号冲突。旧版本v9.3的mingw-w64未包含该枚举定义,因此无冲突。

可行解决方案

1. 禁用mingw-w64的ISO C扩展定义

编译时添加-D__NO_ISOCEXT宏参数,该参数会让mingw-w64的头文件不暴露POSIX扩展的errno枚举值,和v9.3的行为对齐:

i686-w64-mingw32-gcc -D__NO_ISOCEXT [其他编译参数] your_source_files.c

如果是通过autotools构建,可在configure阶段指定:

./configure --host=i686-w64-mingw32 CFLAGS="-D__NO_ISOCEXT"

2. 重命名系统的EOVERFLOW符号

如果方案1无效,可通过编译宏将系统头文件中的EOVERFLOW重命名,避免和argtable的定义冲突:

i686-w64-mingw32-gcc -DEOVERFLOW=sys_EOVERFLOW [其他编译参数] your_source_files.c

该方法会让系统头文件中的EOVERFLOW被替换为sys_EOVERFLOW,不影响argtable自身的枚举定义。

3. 强制插入屏蔽代码(手动编译场景)

创建一个名为fix_eoverflow.h的文件,内容如下:

#define EOVERFLOW sys_EOVERFLOW
#include <errno.h>

编译时通过-include参数强制在所有源文件前插入该头文件,提前屏蔽系统的EOVERFLOW定义:

i686-w64-mingw32-gcc -include fix_eoverflow.h [其他编译参数] your_source_files.c

内容的提问来源于stack exchange,提问作者rboy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 10:22:23