背景
我的一个go程序原来是在windows环境运行的,为了打包后可以查看exe中的软件信息,引入了goversioninfo
现在打算在linux arm64上运行,众所周知golang支持交叉编译的,于是我在我的打包脚本中加入了支持linux编译相关代码,可是打包发现遇到问题了...
遇到问题
打包时遇到报错: unknown ARM relocation type 7
参考了 https://github.com/golang/go/issues/47758
可是后来发现他是要编译 windows arm64 我加了也没用啊(还不知道错的原因)
这个时候我都怀疑是不是我的windows是amd64的 无法编译arm64呢, 那我就把代码搬到linux arm64环境试试咯
在kylinV10 arm64机器上安装了go1.22,拉取了我的程序代码,开始编译,还是报上面那个错误啊,这时我发现我的怀疑应该是错的,回头又看了看go/issues/47758,主要问题是goversioninfo的问题哦,只要删除main.go开头的//go:generate goversioninfo就不会报错了
解决问题
windows环境下手动执行goversioninfo,然后再build;
goversioninfo && go build -ldflags="-s -w --extldflags '-static -fpic' -X 'main.productName=程序名称' -X 'main.buildVersion=版本号' -X 'main.buildTime=构建时间'"
linux环境不需要执行goversioninfo,直接build;
set CGO_ENABLED=0 && set GOOS=linux && set GOARCH=arm64 && go build -ldflags="-s -w --extldflags '-static -fpic'"