golang交叉编译上遇到的问题!

deyen · · 4786 次点击
5楼 <a href="/user/deyen" title="@deyen">@deyen</a> 这些说法都很笼统, 如果你的项目是纯 go 代码,那么交叉编译的时候需要设置 CGO_ENABLED=0 去关闭 CGO。 如果你的项目中有 C,那么关闭 CGO 肯定不行的,因为 C 代码也要编译。但仅仅开启 CGO 也是不行的,因为 go 编译器不知道怎么编译 C 代码,默认的 gcc 编译器不是对应系统的,所以需要使用 CC=xxx-gcc 的方式指定 C 的编译器。 而 fyne 的交叉编译可以看看官方文档:https://developer.fyne.io/started/cross-compiling#compiling-for-different-platforms ,上面明确提示了必须要使用 CGO_ENABLED=1 来开启编译 C 的功能。
#6
更多评论
首先,amd64 linux 编译到 amd64 windows 的程序,命令应该是: ``` CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build main.go ``` 其次,fyne.io/fyne 这个库应该用了 CGO,需要安装响应的 gcc,指定 gcc 才能编译,例如: ``` CGO_ENABLED=1 GOOS=windows GOARCH=amd64 CC=x86_64-xxx-gcc CGO_LDFLAGS=&#34;-static&#34; go build main.go ```
#1
按照你的提示去做,出现以下代码。 ``` $ CGO_ENABLED=1 GOOS=windows GOARCH=amd64 CC=x86_64-xxx-gcc CGO_LDFLAGS=&#34;-static&#34; go build main.go # runtime/cgo cgo: C compiler &#34;x86_64-xxx-gcc&#34; not found: exec: &#34;x86_64-xxx-gcc&#34;: executable file not found in $PATH ``` (怎么我看网上有说法说cgo不支持交叉编译,所以CGO_ENABLED=0来着😂😂)
#2