在Ubuntu16.04交叉编译x86_64-w64-mingw32版GCC6.3.0报错求助
在Ubuntu 16.04交叉编译x86_64-w64-mingw32版GCC 6.3.0的错误解决思路
问题背景
在Ubuntu 16.04系统中为x86_64-w64-mingw32目标交叉编译GCC 6.3.0,执行以下步骤后编译报错:
执行步骤
- 0. 获取源码文件
wget "http://sourceforge.net/projects/mingw-w64/files/mingw-w64/mingw-w64-release/mingw-w64-v5.0.1.tar.bz2" wget "https://ftpmirror.gnu.org/binutils/binutils-2.27.tar.gz" wget "https://ftpmirror.gnu.org/gcc/gcc-6.3.0/gcc-6.3.0.tar.bz2" - 1. 编译binutils-2.27
./configure --target=x86_64-w64-mingw32 --enable-targets=x86_64-w64-mingw32 --prefix=/home/user/gcc_mingw64/build --with-sysroot=/home/user/gcc_mingw64/build make make install - 2. 编译mingw-w64-v5头文件
mkdir build-headers cd build-headers/ ../mingw-w64-headers/configure --host=x86_64-w64-mingw32 --prefix=/home/user/gcc_mingw64/build/x86_64-w64-mingw32 make make install - 3. 创建库软链接
ln -s /home/user/gcc_mingw64/build/x86_64-w64-mingw32 mingw ln -s /home/user/gcc_mingw64/build/x86_64-w64-mingw32/lib lib64 - 4. 编译gcc-6.3.0
./contrib/download_prerequisites mkdir build_gcc cd build_gcc ../configure --target=x86_64-w64-mingw32 --enable-targets=all --disable-werror --disable-shared --enable-version-specific-runtime-libs --with-ld=/home/user/gcc_mingw64/build/bin/x86_64-w64-mingw32-ld --with-as=/home/user/gcc_mingw64/build/bin/x86_64-w64-mingw32-as --enable-languages=c,c++,fortran --prefix=/home/user/gcc_mingw64/build --with-sysroot=/home/user/gcc_mingw64/build make make install
错误信息
checking for ld that supports -Wl,--gc-sections... configure: error: Link tests are not allowed after GCC_NO_EXECUTABLES. Makefile:11457: recipe for target 'configure-target-libstdc++-v3' failed make[1]: *** [configure-target-libstdc++-v3] Error 1
解决思路
1. 调整GCC配置参数
- 移除
--disable-shared参数:交叉编译场景下禁用共享库会破坏libstdc++-v3的配置逻辑,导致链接测试触发限制。修改后的configure命令:../configure --target=x86_64-w64-mingw32 --enable-targets=all --disable-werror --enable-version-specific-runtime-libs --with-ld=/home/user/gcc_mingw64/build/bin/x86_64-w64-mingw32-ld --with-as=/home/user/gcc_mingw64/build/bin/x86_64-w64-mingw32-as --enable-languages=c,c++,fortran --prefix=/home/user/gcc_mingw64/build --with-sysroot=/home/user/gcc_mingw64/build - 若问题未解决,追加
--disable-libstdcxx-pch参数,跳过预编译头的生成逻辑,避免触发链接测试。
2. 验证sysroot与链接路径
- 检查软链接有效性:
确认链接指向的ls -l /home/user/gcc_mingw64/build/mingw ls -l /home/user/gcc_mingw64/build/lib64x86_64-w64-mingw32目录存在且内容完整。 - 检查sysroot下的头文件与基础库:确认
/home/user/gcc_mingw64/build/x86_64-w64-mingw32/include和lib目录包含完整的mingw-w64头文件与库文件。
3. 补全mingw-w64库编译
之前仅编译了mingw-w64的头文件,缺少crt库会导致GCC编译libstdc++时依赖不足。回到mingw-w64源码目录,执行以下步骤编译crt库:
mkdir build-crt cd build-crt ../configure --host=x86_64-w64-mingw32 --prefix=/home/user/gcc_mingw64/build/x86_64-w64-mingw32 make make install
4. 清理缓存后重新构建
删除GCC的编译目录,重新执行配置与编译:
rm -rf build_gcc mkdir build_gcc cd build_gcc # 执行修改后的configure命令 make
内容的提问来源于stack exchange,提问作者dspGI
相关产品推荐
相关产品推荐

