使用Gorm与SQLite驱动时遭遇MinGW链接错误求助
问题描述
我已安装Gorm及SQLite驱动,安装命令如下:
go get -u gorm.io/gorm go get -u gorm.io/driver/sqlite
代码配置如下:
package main import ( "fmt" "gorm.io/driver/sqlite" "gorm.io/gorm" ) type Product struct { gorm.Model id uint code string Price int } func main() { db, err := gorm.Open(sqlite.Open("gorm.db"), &gorm.Config{}) fmt.Println("database created ...") if err != nil { panic("Failed to connect database ...") } db.AutoMigrate(&Product()) }
运行时出现如下错误,推测与MinGW相关,不清楚需哪些配置才能成功运行代码:
# oop C:\Program Files (x86)\Go\pkg\tool\windows_386\link.exe: running gcc failed: exit status 1 c:/mingw/bin/../lib/gcc/x86_64-w64-mingw32/11.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: skipping incompatible c:/mingw/bin/../lib/gcc/x86_64-w64-mingw32/11.2.0/../../../../x86_64-w64-mingw32/lib/libmingwex.a when searching for -lmingwex c:/mingw/bin/../lib/gcc/x86_64-w64-mingw32/11.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: skipping incompatible c:/mingw/bin/../lib/gcc/x86_64-w64-mingw32/11.2.0/../../../../x86_64-w64-mingw32/lib\libmingwex.a when searching for -lmingwex c:/mingw/bin/../lib/gcc/x86_64-w64-mingw32/11.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: skipping incompatible c:/mingw/bin/../lib/gcc/x86_64-w64-mingw32/11.2.0/../../../../x86_64-w64-mingw32/lib/libmingwex.a when searching for -lmingwex c:/mingw/bin/../lib/gcc/x86_64-w64-mingw32/11.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: cannot find -lmingwex c:/mingw/bin/../lib/gcc/x86_64-w64-mingw32/11.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: skipping incompatible c:/mingw/bin/../lib/gcc/x86_64-w64-mingw32/11.2.0/../../../../x86_64-w64-mingw32/lib/libmingwex.a when searching for -lmingwex c:/mingw/bin/../lib/gcc/x86_64-w64-mingw32/11.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: skipping incompatible c:/mingw/bin/../lib/gcc/x86_64-w64-mingw32/11.2.0/../../../../x86_64-w64-mingw32/lib/libmingw32.a when searching for -lmingw32 c:/mingw/bin/../lib/gcc/x86_64-w64-mingw32/11.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: skipping incompatible c:/mingw/bin/../lib/gcc/x86_64-w64-mingw32/11.2.0/../../../../x86_64-w64-mingw32/lib\libmingw32.a when searching for -lmingw32 c:/mingw/bin/../lib/gcc/x86_64-w64-mingw32/11.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: skipping incompatible c:/mingw/bin/../lib/gcc/x86_64-w64-mingw32/11.2.0/../../../../x86_64-w64-mingw32/lib/libmingw32.a when searching for -lmingw32 c:/mingw/bin/../lib/gcc/x86_64-w64-mingw32/11.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: cannot find -lmingw32 c:/mingw/bin/../lib/gcc/x86_64-w64-mingw32/11.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: skipping incompatible c:/mingw/bin/../lib/gcc/x86_64-w64-mingw32/11.2.0/../../../../x86_64-w64-mingw32/lib/libmingw32.a when searching for -lmingw32 collect2.exe: error: ld returned 1 exit status
解决方案
1. 匹配Go与MinGW的架构
错误显示当前Go是32位版本(windows_386),但MinGW是64位版本(x86_64-w64-mingw32),架构不兼容导致链接器找不到对应库。解决方式二选一:
- 卸载32位Go,安装64位版本;
- 卸载64位MinGW,安装32位版本。
2. 配置MinGW环境变量
将MinGW的bin目录(例如C:\mingw\bin)添加到系统环境变量PATH的最前端,确保系统优先调用正确版本的gcc工具。
3. 修正代码字段可见性
Go中私有字段(小写开头)无法被GORM识别,需将Product结构体的字段改为大写开头:
type Product struct { gorm.Model ID uint Code string Price int }
同时将db.AutoMigrate(&Product())改为db.AutoMigrate(&Product{}),语法更规范。
4. 确保MinGW组件完整
重新安装MinGW时,勾选mingw32-base和mingw32-gcc-g++组件,保证libmingwex.a、libmingw32.a等必要链接库完整。
内容的提问来源于stack exchange,提问作者RikoTheSeeker
相关产品推荐
相关产品推荐

