我做了一个Go fyne项目,它可以很好地与go run .
一起工作,并按照预期使用go build .
构建到Linux。
但是,当我尝试使用env GOOS=windows GOARCH=arm64 go build .
交叉编译到Windows时,它会打印出以下错误:
go: downloading github.com/tevino/abool v1.2.0
package playground.com/colors
imports fyne.io/fyne/v2/app
imports fyne.io/fyne/v2/internal/driver/glfw
imports fyne.io/fyne/v2/internal/driver/common
imports fyne.io/fyne/v2/internal/painter/gl
imports github.com/go-gl/gl/v3.1/gles2: build constraints exclude all Go files in /home/mohamed/code/go/pkg/mod/github.com/go-gl/gl@v0.0.0-20211210172815-726fda9656d6/v3.1/gles2
我尝试了Go的全新安装,尝试使用go clean -modcache
,尝试创建一个单独的新模块。
错误复制的代码:
package main
import (
"fmt"
"image/color"
"fyne.io/fyne/v2"
"fyne.io/fyne/v2/app"
"fyne.io/fyne/v2/canvas"
"fyne.io/fyne/v2/container"
"fyne.io/fyne/v2/widget"
)
func main() {
app := app.NewWithID("Color Mixer")
window := app.NewWindow("Color")
red := widget.NewSlider(0, 255)
green := widget.NewSlider(0, 255)
blue := widget.NewSlider(0, 255)
red_value := widget.NewLabel("0")
green_value := widget.NewLabel("0")
blue_value := widget.NewLabel("0")
red_label := widget.NewLabel("Red")
green_label := widget.NewLabel("Green")
blue_label := widget.NewLabel("Blue")
colorx := color.NRGBA{R: 0, G: 0, B: 0, A: 255}
rect := canvas.NewRectangle(colorx)
rect.SetMinSize(fyne.NewSize(300, 300))
red.OnChanged =
func(f float64) {
_, g, b, a := rect.FillColor.RGBA()
rect.FillColor = color.NRGBA{R: uint8(f),
G: uint8(g),
B: uint8(b),
A: uint8(a)}
rect.Refresh()
red_value.SetText(fmt.Sprintf("%.0f", f))
}
green.OnChanged =
func(f float64) {
r, _, b, a := rect.FillColor.RGBA()
rect.FillColor = color.NRGBA{R: uint8(r),
G: uint8(f),
B: uint8(b),
A: uint8(a)}
rect.Refresh()
green_value.SetText(fmt.Sprintf("%.0f", f))
}
blue.OnChanged =
func(f float64) {
r, g, _, a := rect.FillColor.RGBA()
rect.FillColor = color.NRGBA{R: uint8(r),
G: uint8(g),
B: uint8(f),
A: uint8(a)}
rect.Refresh()
blue_value.SetText(fmt.Sprintf("%.0f", f))
}
box := container.NewGridWithRows(
2,
container.NewGridWithRows(3, red_label, green_label, blue_label, red, green, blue, red_value, green_value, blue_value),
rect)
window.SetContent(box)
window.ShowAndRun()
}
2条答案
按热度按时间koaltpgm1#
IIRC,默认情况下交叉编译禁用
cgo
,并且由于github.com/go-gl/gl/v3.1/gles2
包中的所有文件都使用它,因此构建过程自然会将它们全部排除,并产生您所看到的错误。因此,请尝试在您的环境中构建
CGO_ENABLED=1
。简单的
应该可以。
请注意,为了使构建过程真正产生预期的结果,您需要为目标
GOOS
/GOARCH
组合安装C交叉编译器,并且可能通过设置CC
环境变量与go
工具通信-请参见the docs。例如,在Debian及其衍生产品上,您可能需要安装以下软件包:
gcc-mingw-w64-x86-64-win32
--对于建筑物为windows/amd64
。gcc-mingw-w64-i686-win32
--对于建筑物为windows/386
。用于设置
CC
变量的值将相应地为/usr/bin/i686-w64-mingw32-gcc
和/usr/bin/x86_64-w64-mingw32-gcc
。我不知道是否有一个MinGW交叉编译器包,以目标
windows/arm64
,你似乎需要,虽然,因为我没有经验与Windows的ARM设备。还要注意,为了在交叉编译时生成一个合理的Windows可执行映像文件,您可能还希望在您的环境中包含
CGO_LDFLAGS=-static-libgcc
-这将生成一个不依赖于libgcc.dll
的二进制文件,并且您可能甚至希望使用CGO_LDFLAGS=-static-libgcc -static
来进行完全静态的构建。q8l4jmvw2#
前面的答案是正确的。但是你可能喜欢使用“fyne package”命令或fyne-cross -这些工具旨在避免所有的手动设置。