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

Linux下构建Cygwin工具链编译Binutils遇__strcpy_chk未定义错误

问题

在Linux环境下通过GitHub Actions,基于Fedora最新版Docker容器构建Cygwin工具链时,编译Binutils出现如下链接错误:

/usr/lib/gcc/x86_64-w64-mingw32/12.2.1/../../../../x86_64-w64-mingw32/bin/ld: /usr/x86_64-w64-mingw32/sys-root/mingw/lib/../lib/libmingwex.a(lib64_libmingwex_a-dirent.o):(.text+0x2bc): undefined reference to `__strcpy_chk'

相关环境参数:

  • Build = x86_64-linux-gnu
  • Host = x86_64-w64-mingw32
  • Target = x86_64-pc-cygwin

使用的configure脚本:

BINUTILS_V = 2.41

INSTALL_PATH = 

../"binutils-$BINUTILS_V"/configure \
    --quiet \
    --prefix="$INSTALL_PATH" \
    --disable-gdb \
    --build=x86_64-linux-gnu \
    --host=x86_64-w64-mingw32 \
    --target=x86_64-pc-cygwin \
    --disable-libdecnumber \
    --disable-readline \
    --disable-sim \
    --enable-64-bit-bfd \
    --enable-install-libiberty \
    --enable-targets=x86_64-pc-cygwin,i686-pc-cygwin \
    --with-gcc-major-version-only \
    --disable-shared \
    --disable-host-shared \
    lt_cv_deplibs_check_method=pass_all
解决方法
  1. 显式链接libssp库
    __strcpy_chk属于GCC的栈保护库(libssp),在configure命令前添加LDFLAGS="-lssp"参数,强制链接该库:
LDFLAGS="-lssp" ../"binutils-$BINUTILS_V"/configure \
    # 原configure参数保持不变
  1. 关闭Fortify安全编译选项
    如果不需要栈保护功能,可通过CFLAGS禁用_FORTIFY_SOURCE,避免编译器生成对__strcpy_chk的调用:
CFLAGS="-U_FORTIFY_SOURCE -O2" ../"binutils-$BINUTILS_V"/configure \
    # 原configure参数保持不变
  1. 补全mingw工具链依赖
    确保Fedora容器中安装了完整的mingw64工具链,执行以下命令补充缺失的库:
dnf install -y mingw64-gcc mingw64-gcc-c++ mingw64-libssp

验证libssp.a或libssp.dll.a存在于/usr/x86_64-w64-mingw32/sys-root/mingw/lib目录下。

  1. 调整host参数(备选)
    若目标是构建Linux上运行的Cygwin交叉工具链(而非Windows上运行的工具链),可将--host=x86_64-w64-mingw32改为--host=x86_64-linux-gnu,避免依赖mingw的系统库。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 19:17:22