使用 Golang 开发了一个小玩意,用到SQLite数据库,在交叉编译跨平台项目后发现项目运行出错,报错如下:
[error] failed to initialize database, got error Binary was compiled with 'CGO_ENABLED=0', go-sqlite3 requires cgo to work. This is a stub panic: Binary was compiled with 'CGO_ENABLED=0', go-sqlite3 requires cgo to work. This is a stub
GORM 官方的 SQLite 驱动使用了CGO实现,需要在CGO环境下才能工作,在编译的时候需要把 CGO_ENABLED
启用,但是在Windows系统上编译会出现各个各样的编译问题,尤其是在进行交叉编译arm的时候。在官方GitHub issue中找到了相关问题,也给出了对应的相关方案,便是使用第三方的SQLite驱动,项目地址:https://github.com/glebarez/sqlite ,该驱动是由纯go实现的,不依赖CGO。
使用方法很简单:
go get github.com/glebarez/sqlite
然后把代码import 中原 gorm 的sqlite 替换为 "github.com/glebarez/sqlite"
即可。
当然使用第三方驱动的性能肯定是比不上官方的,静态编译的体积也会稍微比较大,不过牺牲这么点也没啥,毕竟也不是什么大项目。
本文作者为Mr.Bai,转载请注明。