Windows+Ubuntu WSL环境下sqlc generate报错求助
解决WSL Ubuntu中sqlc generate提示CGO_ENABLED=1但仍报错的问题
问题场景
在Windows搭配Ubuntu WSL环境执行sqlc generate时,报错提示“the PostgreSQL engine requires cgo. Please set CGO_ENABLED=1”。即使执行export CGO_ENABLED=1 && sqlc generate,仍报相同错误,且go env显示CGO_ENABLED已为'1',依旧无法完成sqlc生成操作。
报错信息
执行sqlc generate的报错:
sqlc generate # package database sql/schema/001_users.sql:1:1: the PostgreSQL engine requires cgo. Please set CGO_ENABLED=1.
执行export CGO_ENABLED=1 && sqlc generate的报错:
export CGO_ENABLED=1 && sqlc generate # package database sql/schema/001_users.sql:1:1: the PostgreSQL engine requires cgo. Please set CGO_ENABLED=1.
环境变量信息(go env输出):
GO111MODULE='' GOARCH='amd64' GOBIN='' GOCACHE='/home/user/.cache/go-build' GOENV='/home/user/.config/go/env' . . . GOHOSTARCH='amd64' GOHOSTOS='linux' GOINSECURE='' GOMODCACHE='/home/user/go/pkg/mod' GONOPROXY='' GONOSUMDB='' GOOS='linux' GOPATH='/home/user/go' GOPRIVATE='' GOPROXY='https://proxy.golang.org,direct' GOROOT='/usr/local/go' GOSUMDB='sum.golang.org' . . . CGO_ENABLED='1' GOMOD='/mnt/c/Users/User/Desktop/Golang/main/go.mod'
解决方法
- 重新编译带CGO的sqlc版本
静态编译的sqlc可能无法读取当前shell的CGO环境变量,重新编译并安装:
CGO_ENABLED=1 go install github.com/sqlc-dev/sqlc/cmd/sqlc@latest
确保新安装的sqlc在PATH中优先级高于旧版本。
- 切换到项目根目录执行命令
从环境变量看,项目go.mod位于Windows挂载目录,先切换到该目录再操作:
cd /mnt/c/Users/User/Desktop/Golang/main export CGO_ENABLED=1 sqlc generate
- 安装PostgreSQL开发依赖库
sqlc的PostgreSQL引擎需要依赖libpq库,执行以下命令安装:
sudo apt update && sudo apt install libpq-dev
- 永久设置CGO_ENABLED环境变量
将环境变量配置写入shell配置文件,避免每次手动设置:
echo "export CGO_ENABLED=1" >> ~/.bashrc source ~/.bashrc
之后再执行sqlc generate即可。
内容的提问来源于stack exchange,提问作者许家宝
相关产品推荐
相关产品推荐

