Windows11下使用Golang+go-gst运行示例时链接报错求助
问题:Windows 11下使用Go+go-gst运行示例出现MinGW链接错误
在Windows 11系统中,按照go-gst官方说明操作后,运行launch示例时始终出现链接错误,报错信息如下:
C:\Program Files\Go\pkg\tool\windows_amd64\link.exe: running gcc failed: exit status 1 C:/ProgramData/mingw64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: C:/ProgramData/mingw64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../x86_64-w64-mingw32/lib/../lib/crt2.o:crtexe.c:(.rdata$.refptr.__mingw_app_type[.refptr.__mingw_app_type]+0x0): undefined reference to `__mingw_app_type' C:/ProgramData/mingw64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: C:/ProgramData/mingw64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../x86_64-w64-mingw32/lib/../lib/crt2.o:crtexe.c:(.rdata$.refptr.__mingw_initltssuo_force[.refptr.__mingw_initltssuo_force]+0x0): undefined reference to `__mingw_initltssuo_force' C:/ProgramData/mingw64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: C:/ProgramData/mingw64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../x86_64-w64-mingw32/lib/../lib/crt2.o:crtexe.c:(.rdata$.refptr.__mingw_initltsdyn_force[.refptr.__mingw_initltsdyn_force]+0x0): undefined reference to `__mingw_initltsdyn_force' C:/ProgramData/mingw64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: C:/ProgramData/mingw64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../x86_64-w64-mingw32/lib/../lib/crt2.o:crtexe.c:(.rdata$.refptr.__mingw_initltsdrot_force[.refptr.__mingw_initltsdrot_force]+0x0): undefined reference to `__mingw_initltsdrot_force' collect2.exe: error: ld returned 1 exit status
原因与解决方法
原因
这个链接错误是MinGW GCC版本兼容性问题导致的:GCC 13.x版本的MinGW-w64在与Go的链接器配合时,会出现CRT(C运行时)库符号未定义的问题,Go的链接器无法正确识别新版本MinGW引入的这些符号。
解决步骤
- 降级MinGW GCC版本:将MinGW的GCC版本降级到12.x系列(比如12.2.0),这是最稳妥的解决方案。可以通过MSYS2包管理器安装指定版本,或者下载对应版本的MinGW-w64压缩包替换现有安装目录。
- 调整环境变量优先级:确保MinGW的
bin目录在系统PATH的最前端,避免系统中其他版本的GCC或编译工具干扰链接过程。 - 清理Go缓存:运行命令
go clean -cache清理Go的编译缓存,然后重新编译程序,避免旧缓存导致的兼容问题。 - 尝试强制静态链接(可选):如果暂时无法降级MinGW,可以尝试在编译时添加链接参数:
go build -ldflags="-linkmode=external -extldflags=-static",强制使用静态CRT库,但这个方法不一定适用于所有场景。
内容的提问来源于stack exchange,提问作者Danijel Kapetanovic
相关产品推荐
相关产品推荐

