首页 > 其他分享 >Golang: 如何交叉编译

Golang: 如何交叉编译

时间:2023-08-14 11:35:11浏览次数:42  
标签:交叉 Windows GOOS Golang 编译 GOARCH Linux go 64

0. golang 可以交叉编译出不同操作系统运行的程序

1. 在mac m2 架构下,golang程序 mian文件所在的主目录下,即可生成

# 在命令行进入项目根目录,并执行以下命令
CGO_ENABLED=0 GOOS=xxx GOARCH=xxx go build

参数说明

  • CGO_ENABLED:是否使用 C语言 版本的 GO 编译器。0 表示不使用,1 表示使用,默认 CGO_ENABLED 的值为 1,允许你在 Go 代码中调用 C 代码。自从 golang 1.5 以后 go 就使用 go 语言编译器进行编译。如果系统中使用了 C 的库,那么就设置为 1;没有使用的话就设置为 0 即可。
  • GOOS:目标操作系统,比如 Mac、Linux、Windows 等
  • GOARCH:目标操作系统的架构,32 位、64 位、ARM 等

2.常用的 GOOS 与 GOARCH (【注】更多系统环境请移步官网:https://golang.org/doc/install/source#environment):

$GOOS$GOARCH描述
darwin amd64 Mac 64 位系统
darwin arm64 Mac 64 位系统(ARM)
linux 386 Linux 32 位系统
linux amd64 Linux 64 位系统
linux arm Linux 32 位系统(ARM)
linux arm64 Linux 64 位系统(ARM)
windows 386 Windows 32 位系统
windows amd64 Windows 64 位系统
windows arm Windows 32 位系统(ARM)
windows arm64 Windows 64 位系统(ARM)

 

2. Mac 编译

【注】默认在当前项目的根目录生成项目的二进制文件。

2.1 编译成 Linux 可执行文件

# Linux 通用 64 位系统(Centos、Ubuntu等)
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build

2.2 编译成 Windows 可执行文件

# Windows 64 位系统
CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build 

3. Linux 编译

【注】默认在当前项目的根目录生成项目的二进制文件。

3.1 编译成 Mac 可执行文件

# Mac 64 位系统
CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build 

3.2 编译成 Windows 可执行文件

# Windows 64 位系统
CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build 

4. Windows 编译

【注】默认在当前项目的根目录生成项目的二进制文件。

4.1 编译成 Mac 可执行文件

# Mac 64 位系统
SET CGO_ENABLED=0 SET GOOS=darwin SET GOARCH=amd64 go build

4.2 编译成 Linux 可执行文件

# Linux 通用 64 位系统(Centos、Ubuntu等)
SET CGO_ENABLED=0 SET GOOS=linux SET GOARCH=amd64 go build

转自:http://roc.havemail.cn/archives/1489.html

标签:交叉,Windows,GOOS,Golang,编译,GOARCH,Linux,go,64
From: https://www.cnblogs.com/yaoshi641/p/17628178.html

相关文章

  • golang简单实现CLHLock,不可重入的clh自旋锁
    如果不想自旋,可以把Lock、waitIsFinish和noticeIsFinish代码中的方式2注释掉,改用方式1。不过实际测试在低并发的情况下,自旋的执行效率更高,要根据实际业务场景选择使用哪种方式。源代码如下:import("runtime""sync/atomic")const(Gosched_Spin_Count=10000......
  • 修改审计插件源码编译mariadb获取审计插件
    环境:OS:Centos7mariadb:10.4.29背景:mysql5.7.35版本之后就不能使用mariadb自带的审计插件(windows版本的除外),需要修改源码文件重新编译获取审计插件 1.安装编译所需依赖#yuminstall-yopenssllibssl-devbuild-essentialbisonlibncurses-devcmakegcc-gcc+gitnc......
  • 为什么预编译的占位符可以防止SQL注入问题
     预编译语句(PreparedStatements)可以有效地防止SQL注入问题,其底层原理主要涉及两个方面:参数化查询和SQL解析。1.参数化查询(ParameterizedQueries):  预编译语句使用参数化查询的方式,即在SQL语句中使用占位符(如`?`或命名占位符)来代替实际的参数值。然后,将参数值与SQL语句在服......
  • 机器学习编译(三):张量程序案例 TensorIR
    使用张量程序抽象的目的是为了表示循环和相关的硬件加速选择,如多线程、特殊硬件指令的使用和内存访问。1.一个例子使用张量程序抽象,我们可以在较高层的抽象制定一些与特定硬件无关的较通用的IR优化(计算优化)。比如,对于两个大小为128×128的矩阵A和B,我们进行如下两步的......
  • windows 10下编译mariadb
    环境:OS:Windows10mariadb:10.4.29 1.下载mariadb源码 2.安装依赖组件 3.修改sql_locale.cc文件编码文件位置:E:\mariadb\mariadb-10.4.29\sql在ue里面打开,另存为的时候将改成utf-8编码,选择格式为:utf-8withbom我这里只选择utf-8好像也可以 4.编译E:\mariadb>c......
  • Golang之旅——内存管理
    转载放在最前一文带你了解,虚拟内存、内存分页、分段、段页式内存管理[Golang三关-典藏版]一站式Golang内存洗髓经|Go技术论坛刘丹冰Aceld感谢以上文章作者,收获满满......
  • JVM之字节码的编译原理
    JVM之字节码的编译原理Java最初诞生的目的就是为了在不依赖特定的物理硬件和操作系统环境下运行,那么也就是说Java程序实现跨平台我的基石其实就是字节码。Java之所以能够解决程序的安全性问题、跨平台移植性等问题,最主要的原因就是Java源代码的编译结果并非是本地机器指令,而是字......
  • 【我和openGauss的故事】构建openGauss开发编译提交一体化环境
    大数据模型[openGauss](javascript:void(0);)2023-07-2917:58发表于四川前文本文适合对openGauss源代码有好奇心的爱好者,那么一个友好的openGauss源代码环境应该是怎么样的。openGauss的开发环境是如何设置的?openGauss的编译环境是如何构建的?如何向openGauss提交代码,笔者集合官......
  • VS2019编译CloudCompare2.12.4
    参考:https://blog.csdn.net/pingfanderen5/article/details/1261800821.VisualStudio2019对应v142工具2.安装QT,qt5.14.2及以前的版本存在下载包,下载地址:http://download.qt.io/ ,但是5.14.2只能支持到VS2017。 所以采用在线安装的方式安装qt5.15.2版本 源码准......
  • RTMP流媒体服务器LntonMedia(免费版)视频直播点播平台采用Golang指针问题导致平台重复推
    我们的团队在研发视频流媒体平台时,广泛应用了Go语言。之前我们也与大家交流过关于Go语言指针的问题和应用。如果你对视频流媒体平台编译中如何运用Go语言指针感兴趣,可以了解一下我们的讨论。在对LntonMedia的编译中,我们发现Golang指针问题会导致系统内的重复推流。Golang遍历切片代......