Windows下安装Go的sqlc遇__stack_chk_fail链接错误求助
解决Windows下安装sqlc时
__stack_chk_fail未定义的链接错误 问题背景
- Go版本:go1.22.1 windows/amd64
- 系统:Windows
执行安装命令:
go install github.com/sqlc-dev/sqlc/cmd/sqlc@latest
触发链接错误,核心提示为:
C:\Users\aymen\AppData\Local\Temp\go-link-3004266855\000005.o: In function
_fingerprintVar': C:/Users/aymen/go/pkg/mod/github.com/pganalyze/pg_query_go/v5@v5.1.0/parser/include/pg_query_fingerprint_defs.c:660: undefined reference to__stack_chk_fail'
...
collect2.exe: error: ld returned 1 exit status
解决方案
方法1:禁用栈保护编译
错误源于GCC栈保护机制相关函数缺失,通过设置环境变量关闭栈保护后重新编译:
CMD环境:
set CGO_CFLAGS=-fno-stack-protector go install github.com/sqlc-dev/sqlc/cmd/sqlc@latest
PowerShell环境:
$env:CGO_CFLAGS="-fno-stack-protector" go install github.com/sqlc-dev/sqlc/cmd/sqlc@latest
方法2:修复GCC环境
该问题常因使用的MinGW版本不兼容或缺失组件导致:
- 卸载现有MinGW,安装MinGW-w64(选择x86_64架构)
- 将MinGW的
bin目录(如C:\mingw64\bin)添加到系统PATH的最前端,避免与其他工具冲突 - 重启终端后重新执行安装命令
方法3:使用预编译二进制包
若源码编译始终失败,直接使用官方预编译版本:
- 找到sqlc官方发布的Windows amd64二进制包
- 解压后将
sqlc.exe复制到Go的bin目录(默认路径:C:\Users\<你的用户名>\go\bin) - 确保该bin目录在系统PATH中,即可直接使用
sqlc命令
内容的提问来源于stack exchange,提问作者Hamdi-BM
相关产品推荐
相关产品推荐

