概述
交叉编译,也称跨平台编译,就是在一个平台上编译源代码,生成结果为另一个平台上的可执行代码。这里的平台包含两个概念:体系架构 (如 AMD, ARM) 和 操作系统 (如 Linux, Windows)。同一个体系架构可以运行不同的操作系统,反过来,同一个操作系统也可以运行在不同的体系架构上。
Go 实现跨平台编译的思想其实很简单:通过保存可以生成最终机器码的多份翻译代码, 在编译时根据 GOARCH=体系架构 和GOOS=操作系统参数进行初始化设置, 最终调用对应平台编写的特定方法来生成机器码,从而实现跨平台编译。
例子
下面的例子统一以 amd64
作为体系架构参数,读者请根据自己的环境更换对应参数。
Mac
编译为 Linux 代码
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build main.go
编译为 Windows 代码
CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build main.go
Linux
编译为 Mac 代码
CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build main.go
编译为 Windows 代码
CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build main.go
Windows
编译为 Mac 代码
SET CGO_ENABLED=0
SET GOOS=darwin
SET GOARCH=amd64
go build main.go
编译为 Linux 代码
SET CGO_ENABLED=0
SET GOOS=linux
SET GOARCH=amd64
go build main.go
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
Linux系统
+关注
关注
4文章
567浏览量
26913 -
机器码
+关注
关注
0文章
12浏览量
8253 -
交叉编译器
+关注
关注
0文章
10浏览量
7393
发布评论请先 登录
相关推荐
【HarmonyOS HiSpark AI Camera】交叉编译darknet
之前尝试了交叉编译自己的程序https://bbs.elecfans.com/jishu_2012330_1_1.html现在可以开始考虑复杂点的工程了。darknet是一个基于c/c++编写的深度
发表于 12-03 17:27
嵌入式系统工程化设计要注意哪些方面
嵌入式系统工程化设计7——计算机可靠性设计原创·林超100前一讲高可靠性是嵌入式系统的关键设计因素,但是讲到的内容是普适性的,对任何带电子设备的设备都需要。但是针对信息处理和控制的嵌入式计算机
发表于 11-08 06:51
嵌入式系统工程化设计的相关资料分享
了行业的飞速发展,可以说这个行业在风口上。但是,也发现我们的行业的不足,基础严重依赖国外,企业设计能力参差不齐,从业人员培训费时费力,导致产品可靠性低下,项目遭受重大损失。解决这一问题,需要提升我国嵌入式计算机工程化设计能力。什么是工程化首先什么是
发表于 11-09 06:37
如何建立交叉编译工具链并编译内核
目录概述准备下载和自己开发板对应的BSP包:韦东山版Firefly版注意要用到的软件FileZilla虚拟机安装过程安装前置软件包获取内核源码和交叉编译工具链源码配置交叉
发表于 12-20 08:07
什么是交叉编译?为什么要交叉编译
什么是交叉编译交叉编译是在一个平台上生成另一个平台上的可执行代码(例如我们在windows上用keil编译代码生成hex文件,供51单片机使
发表于 01-13 06:04
CSS工程化实践成果分析
作为Web开发的重要组成部分,CSS技术演进也在推动着前端工程化不断进步。本文将从CSS模块化、namespace约束、CSS in JS方案三个方面逐步深入解读CSS在工程化领域取得的成果
发表于 09-27 15:10
•0次下载
arm-linux的交叉编译环境解析
的主要原因在于,多数嵌入式目标系统不能提供足够的资源供编译过程使用,因而只好将编译工程转移到高性能的主机中进行。 linux下的交叉编译环境
发表于 10-31 11:26
•7次下载
ST微电子STM8的C交叉编译用户指南
《STM8交叉编译器用户指南》是程序员为STM8微控制器环境编写C程序的参考指南。它概述了交叉编译器的工作原理,并解释了如何
发表于 06-04 08:00
•12次下载
Linux交叉编译选项与源码与目标文件分离
交叉编译选项 编译Linux,通常只需要运行 make menuconfig 配置要编译的模块,然后运行 make 。Linux默认是做本地编译
评论