Windows 64位环境MSYS2编译GCC 11.2.0的目标三元组及报错问题
问题解答
1. --host和--target参数的正确取值
直接使用你执行gcc -dumpmachine得到的x86_64-w64-mingw32即可,两个参数保持和该值一致。
你之前遇到x86_64-pc-mingw64-ar找不到的报错,核心原因是你没有显式指定编译工具,configure会自动给工具加host前缀去查找,但你用的Code::Blocks自带的MinGW工具链没有带该前缀的可执行文件。
2. MSYS Bash下build三元组的正确性
默认生成的x86_64-pc-msysbuild三元组是错误的。
你用来编译的编译器是MinGW目标的,不是MSYS目标的,需要手动指定--build=x86_64-w64-mingw32,让build、host、target三个三元组完全一致,属于本地编译场景,避免configure自动生成错误的工具前缀。
3. 调整后仍报错的解决方案
按以下步骤逐一排查修复:
- 先确认PATH优先级:把Code::Blocks自带MinGW的bin目录放在PATH最前面,执行
which gcc、which ar命令,确认输出指向你用的编译器路径,不是MSYS自带的工具。 - configure阶段显式指定编译工具,追加参数:
AR=ar RANLIB=ranlib CC=gcc CXX=g++,强制configure使用当前PATH下不带前缀的工具,不会自动拼接host前缀查找。 - 修正你现有configure命令的错误:
- 源码路径少了横杠,把
../../source/gcc11.2.0/configure改成../../source/gcc-11.2.0/configure --prefix要写绝对安装路径,不要写相对路径objdir- 删掉
--enable-gold参数,gold链接器不支持MinGW目标,开了会触发额外报错
- 源码路径少了横杠,把
- 不要在包含空格、特殊字符的目录下编译GCC,避免路径解析错误。
按上面调整后,不会再触发pex-unix.c的相关报错,因为三元组设置为MinGW目标后,libiberty会自动选择Windows平台的实现代码,不会调用不兼容的Unix API。
内容的提问来源于stack exchange,提问作者NelsonTheLotus
相关产品推荐
相关产品推荐

