Windows下用msys2编译Makefile遭遇collect2致命错误
解决msys2编译AOBTM时ld段错误的方案
升级binutils版本
当前使用的binutils-2.37-5版本较旧,Windows平台下该版本链接器存在已知段错误问题。打开msys2终端执行:pacman -Syu binutils升级至最新稳定版后重新编译。
调整编译参数
进入src目录的Makefile,修改LDFLAGS相关配置:- 添加
-Wl,--no-keep-memory,让链接器改用磁盘缓存替代内存缓存,避免内存溢出触发段错误; - 或者尝试添加
-static参数,切换为静态链接,排查动态链接库冲突问题。
- 添加
清理编译缓存重试
先清除之前编译生成的残留文件:make clean再重新执行编译命令:
make分析ld.exe.stackdump定位问题
打开生成的ld.exe.stackdump文件,查看末尾的错误堆栈信息,定位是否由特定目标文件导致链接失败。如果能找到问题文件,尝试单独编译该文件再手动链接:gcc -c 问题文件名.c -o 问题文件名.o ld -o run.exe 其他目标文件.o 问题文件名.o逐步排查触发错误的具体文件。
切换msys2环境类型
如果当前用的是MSYS环境,尝试切换到MINGW64或MINGW32终端(从Windows开始菜单找到对应入口),不同环境的工具链配置不同,可能解决兼容性问题。
内容的提问来源于stack exchange,提问作者Carrol
相关产品推荐
相关产品推荐

