Skip to content
On this page

跨平台编译

编译不同平台

与Go的交叉编译设计得很简单——我们只需为目标操作系统设置环境变量GOOS(如果目标是不同的架构,则设置GOARCH)。不幸的是,当使用原生图形调用时,在Fyne中使用CGo会使这变得有点困难。

从所开发的计算机编译

要交叉编译Fyne应用程序,您还必须将CGO_ENABLED=1设置为启用C编译器(当目标平台与当前系统不同时,这通常会关闭)。不幸的是,这样做意味着您必须为要编译的目标平台拥有一个C编译器。安装适当的编译器后,还需要设置CC环境变量,以告诉Go使用哪个编译器。

有许多方法可以安装所需的工具,以及可以使用的不同工具。Fyne开发人员建议的配置为:

GOOS (target)CCproviderdownloadnotes
darwino32-clangosxcrossgithubYou will also need to install the macOS SDK (instructions at the download link)
windowsx86_64-w64-mingw64-gccmingw64package managerFor macOS use homebrew
linuxgcc or x86_64-linux-musl-gccgcc or musl-crosspackage managermusl-cross is available from homebrew to provide the linux gcc. You will also need to install X11 and mesa headers for compilation.

使用上面设置的环境变量,您应该能够以通常的方式进行编译。如果发生进一步的错误,很可能是因为缺少包。某些目标平台需要安装额外的库或标头才能成功编译

使用一个虚拟环境

由于Linux系统能够很容易地交叉编译到macOS和Windows,因此当您不是从Linux开发时,使用虚拟化环境会更简单。Docker镜像对于复杂的构建配置是一个有用的工具,这也适用于Fyne。可以使用不同的工具。Fyne开发人员推荐的工具是Fyne cross。它受到了xgo的启发,并使用了构建在golang交叉映像之上的docker映像,其中包括用于windows的MinGW编译器和macOS SDK以及Fyne需求。

fyne cross允许为以下目标构建二进制文件并创建分发包:

GOOSGOARCH
darwinamd64
darwin386
linuxamd64
linux386
linuxarm64
linuxarm
windowsamd64
windows386
androidarm64
androida rm
androidamd64
android386
ios
freebsdamd64
freebsdarm64

WARNING

IOS编译仅在darwin主机上编译

必需条件

  • go >= 1.13
  • docker

安装

go
go get github.com/fyne-io/fyne-cross

用法

go
fyne-cross <command> [options]

The commands are:

	darwin        Build and package a fyne application for the darwin OS
	linux         Build and package a fyne application for the linux OS
	windows       Build and package a fyne application for the windows OS
	android       Build and package a fyne application for the android OS
	ios           Build and package a fyne application for the iOS OS
	freebsd       Build and package a fyne application for the freebsd OS
	version       Print the fyne-cross version information

Use "fyne-cross <command> -help" for more information about a command.

通配符

如果要针对指定GOOS的所有受支持GOARCH进行编译,则arch标志支持通配符

例如

go
fyne-cross windows -arch=*

等价于

go
fyne-cross windows -arch=amd64,386

例如 下面的示例交叉编译并打包fyne示例应用程序

go
git clone https://github.com/fyne-io/examples.git
cd examples

编译并打包主要示例应用程序

go
fyne-cross linux

WARNING

默认情况下,fyne cross会将包编译到当前目录中。 上面的命令相当于:fyne cross-linux。

编译并打包特定的示例应用程序

go
fyne-cross linux -output bugs ./cmd/bugs