Avec le développement du cloud computing, de plus en plus d'applications doivent fonctionner sur plusieurs plates-formes. Golang, en tant que langage fortement typé, est également performant dans ce domaine. La compilation croisée est le processus de compilation du code source dans un environnement de plate-forme et de son exécution sur une autre plate-forme. Cet article présentera le processus de compilation croisée de Golang.
Processus de compilation croisée
Tout d'abord, vous devez télécharger la chaîne d'outils de compilation croisée. Sur le site officiel de Golang, nous pouvons trouver le lien de téléchargement correspondant à la plateforme, comme le montre la figure ci-dessous :
Après avoir sélectionné le système d'exploitation, l'architecture du CPU et la version correspondants, décompressez-le dans n'importe quel répertoire.
Ensuite, vous devez définir des variables d'environnement dans le terminal afin que Golang puisse trouver la bonne chaîne d'outils lors de la compilation. En prenant le système macOS comme exemple, entrez la commande suivante :
export GOROOT=/usr/local/go export GOOS=linux export GOARCH=amd64 export CGO_ENABLED=0 export GOBIN=$GOROOT/bin export PATH=$PATH:$GOBIN
où, GOROOT
représente le chemin d'installation de Golang, GOOS
représente le système d'exploitation cible et GOARCH
Indique l'architecture du processeur cible, CGO_ENABLED
indique s'il faut activer Cgo, GOBIN
indique le chemin du fichier exécutable compilé, PATH
est utilisé dans les systèmes Unix/Linux Variables système pour définir les variables d'environnement. GOROOT
表示 Golang 的安装路径,GOOS
表示目标操作系统,GOARCH
表示目标 CPU 架构,CGO_ENABLED
表示是否启用 Cgo,GOBIN
表示编译后的可执行文件路径,PATH
是 Unix/Linux 系统中用于设置环境变量的系统变量。
接下来,编写或下载待交叉编译的 Golang 程序代码,保存为 .go
文件。例如,以下代码使用 Golang 实现了一个简单的 Hello World 程序:
package main import "fmt" func main() { fmt.Println("Hello, World!") }
然后,使用以下命令将代码编译为可执行文件:
$ go build -v -o hello
其中,-v
参数表示输出详细信息,-o
参数指定编译生成的可执行文件名称。在上面的命令中,hello
指定了生成的可执行文件的名称,也可以用其他名称代替。
编译完成后,我们得到了在当前平台上运行的可执行文件。接下来,需要使用交叉编译工具链来生成目标平台上可运行的二进制文件。使用以下命令进行交叉编译:
$ GOOS=linux GOARCH=arm GOARM=5 go build -v -o hello-arm5
以上命令中,GOOS
指定目标操作系统为 Linux,GOARCH
指定目标 CPU 架构为 ARM,GOARM
指定 ARM 版本,这里指定为 5。这行命令将会在当前目录生成名为 hello-arm5
的二进制文件。
除了 Linux 和 ARM,Golang 也支持其他的操作系统和架构,如 macOS、Windows、FreeBSD、OpenBSD、NetBSD、DragonFlyBSD、Solaris、AIX,还有其他的 CPU 架构,如 386、amd64、arm、mips、mipsle、mips64、mips64le、ppc64、ppc64le、s390x。
交叉编译注意事项
在进行交叉编译时,需要注意以下几点:
syscall
库的函数时,需要针对目标操作系统使用 windows
、linux
、darwin
.go
. Par exemple, le code suivant implémente un simple programme Hello World utilisant Golang : -v
représente les détails de la sortie, le paramètre -o
spécifie le nom du fichier exécutable généré par la compilation. Dans la commande ci-dessus, hello
spécifie le nom du fichier exécutable généré et peut également être remplacé par d'autres noms. Une fois la compilation terminée, nous obtenons le fichier exécutable qui s'exécute sur la plateforme actuelle. Ensuite, vous devez utiliser une chaîne d'outils de compilation croisée pour générer des binaires pouvant s'exécuter sur la plate-forme cible. Utilisez la commande suivante pour effectuer une compilation croisée :
rrreeeDans la commande ci-dessus, GOOS
spécifie le système d'exploitation cible comme Linux, GOARCH
spécifie l'architecture du processeur cible comme ARM, GOARM code> spécifie la version ARM, ici elle est spécifiée comme 5. Cette ligne de commande générera un fichier binaire nommé hello-arm5
dans le répertoire courant.
syscall
, vous devez utiliser windows
, linux
, darwin code>, etc. pour le système d’exploitation cible. Interface d’appel système spécifique. 🎜🎜Gérer les dépendances. Dans Go, les outils de gestion de packages couramment utilisés incluent go mod, godep, dep, etc. Lorsque vous les utilisez, vous devez sélectionner l'outil approprié en fonction de la situation de compilation croisée et verrouiller les versions des dépendances pour garantir une compilation et un fonctionnement corrects sur le plateforme cible. 🎜🎜Spécifiez les variables d'environnement au moment de la compilation. GOOS et GOARCH définissent l'architecture Golang Pour la compilation croisée, différentes variables d'environnement cible doivent être définies et CGO ne peut pas être utilisé lors de la compilation. 🎜🎜🎜Résumé🎜🎜Cet article présente le processus de compilation croisée de Golang, y compris le téléchargement et l'installation de la chaîne d'outils, la définition des variables d'environnement, la compilation de code et les précautions de compilation croisée. Pour le développement d'applications multiplateformes, la compilation croisée est une compétence nécessaire. J'espère que cet article pourra vous aider. 🎜
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!