跨平台编译
编译不同平台
与Go的交叉编译设计得很简单——我们只需为目标操作系统设置环境变量GOOS(如果目标是不同的架构,则设置GOARCH)。不幸的是,当使用原生图形调用时,在Fyne中使用CGo会使这变得有点困难。
从所开发的计算机编译
要交叉编译Fyne应用程序,您还必须将CGO_ENABLED=1
设置为启用C编译器(当目标平台与当前系统不同时,这通常会关闭)。不幸的是,这样做意味着您必须为要编译的目标平台拥有一个C编译器。安装适当的编译器后,还需要设置CC环境变量,以告诉Go使用哪个编译器。
有许多方法可以安装所需的工具,以及可以使用的不同工具。Fyne开发人员建议的配置为:
GOOS (target) | CC | provider | download | notes |
---|---|---|---|---|
darwin | o32-clang | osxcross | github | You will also need to install the macOS SDK (instructions at the download link) |
windows | x86_64-w64-mingw64-gcc | mingw64 | package manager | For macOS use homebrew |
linux | gcc or x86_64-linux-musl-gcc | gcc or musl-cross | package manager | musl-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允许为以下目标构建二进制文件并创建分发包:
GOOS | GOARCH |
---|---|
darwin | amd64 |
darwin | 386 |
linux | amd64 |
linux | 386 |
linux | arm64 |
linux | arm |
windows | amd64 |
windows | 386 |
android | arm64 |
android | a rm |
android | amd64 |
android | 386 |
ios | |
freebsd | amd64 |
freebsd | arm64 |
WARNING
IOS编译仅在darwin主机上编译
必需条件
- go >= 1.13
- docker
安装
go get github.com/fyne-io/fyne-cross
用法
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标志支持通配符
例如
fyne-cross windows -arch=*
等价于
fyne-cross windows -arch=amd64,386
例如 下面的示例交叉编译并打包fyne示例应用程序
git clone https://github.com/fyne-io/examples.git
cd examples
编译并打包主要示例应用程序
fyne-cross linux
WARNING
默认情况下,fyne cross会将包编译到当前目录中。 上面的命令相当于:fyne cross-linux。
编译并打包特定的示例应用程序
fyne-cross linux -output bugs ./cmd/bugs