go如何进行交叉编译

2018-02-16

文章目录

golang交叉编译

问题

golang如何在一个平台编译另外一个平台可以执行的文件。比如在mac上编译Windows和linux可以执行的文件。那么我们的问题就设定成:如何在mac上编译64位linux的可执行文件。

解决方案

golang的交叉编译要保证golang版本在1.5以上,本解决方案实例代码1.9版本执行的。

我们想要编译的文件hello.go

hello.go

1
2
3
4
5
6
7
package mainimport "fmt"func main() {fmt.Printf("hello, world\n")
}

在mac上编译64位linux的命令编译命令

bash:

1
GOOS=linux GOARCH=amd64 go build hello.go

上面这段代码直接在命令控制台里面运行就可以生成64位linux的可执行程序。

参数解析

这里用到了两个变量: - GOOS:目标操作系统 - GOARCH:目标操作系统的架构

OS ARCH OS version
linux 386 / amd64 / arm >= Linux 2.6
darwin 386 / amd64 OS X (Snow Leopard + Lion)
freebsd 386 / amd64 >= FreeBSD 7
windows 386 / amd64 >= Windows 2000

编译其他平台的时候根据上面表格参数执行编译就可以了。

扩展阅读

在网络上的诸多教程中可能会看到下面的编译命令

1
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build hello.go

其中CGO_ENABLED=0的意思是使用C语言版本的GO编译器,参数配置为0的时候就关闭C语言版本的编译器了。自从golang1.5以后go就使用go语言编译器进行编译了。在golang1.9当中没有使用CGO_ENABLED参数发现依然可以正常编译。当然使用了也可以正常编译。比如把CGO_ENABLED参数设置成1,即在编译的过程当中使用CGO编译器,我发现依然是可以正常编译的。

实际上如果在go当中使用了C的库,比如import "C"默认使用go build的时候就会启动CGO编译器,当然我们可以使用CGO_ENABLED=0来控制go build是否使用CGO编译器。

go如何进行交叉编译相关推荐

  1. Golang的交叉编译问题

    参考:Golang交叉编译各个平台的二进制文件 - Go语言中文网 - Golang中文社区 (studygolang.com).也谈Go的可移植性 | Tony Bai 今天准备将一个在Mac上开发 ...

  2. Linux 交叉编译简介

    Linux 交叉编译简介 主机,目标,交叉编译器 主机与目标 编译器是将源代码转换为可执行代码的程序.像所有程序一样,编译器运行在特定类型的计算机上,输出的新程序也运行在特定类型的计算机上. 运行编译 ...

  3. TVM交叉编译和远程RPC

    TVM交叉编译和远程RPC 本文介绍了TVM中使用RPC的交叉编译和远程设备执行. 使用交叉编译和RPC,可以在本地计算机上编译程序,然后在远程设备上运行它.当远程设备资源受到限制时(如Raspber ...

  4. 用TensorRT针对AArch64用户的交叉编译示例

    用TensorRT针对AArch64用户的交叉编译示例 以下介绍如何在x86_64linux下为AArch64 QNX和Linux平台交叉编译TensorRT示例. 2.1. Prerequisite ...

  5. Go 学习笔记(37)— 标准命令(go build 跨平台编译、交叉编译、go clean、go run、go fmt、go install、go get)

    1. 标准命令简述 Go 本身包含来大量用于处理 Go 程序的命令和工具. 命令 作用 build 用于编译指定的代码包或 Go 语言源码文件.命令源码文件会被编译成可执行文件,并存放到命令执行的目录 ...

  6. linux wifi-tools,Linux下WiFi工具wireless_tools交叉编译,及其支持生成iwconfig使用的内核配置...

    内核的配置: General setup  ---> Kernel compression mode (LZMA)  --->LZMA [*] Networking support  -- ...

  7. Cmake 交叉编译

    转载自 http://zhixinliu.com/2016/02/01/2016-02-01-cmake-cross-compile/ CMake交叉编译 CMake的使用,以及如何将一个项目移植到A ...

  8. Ubuntu 8.04嵌入式交叉编译环境arm-linux-gcc搭建过程图解

    Linux版本:Ubuntu8.04 内核版本:Linux 2.6.24 交叉编译器版本:arm-linux-gcc-3.4.1 交叉编译器下载链接: https://share.weiyun.com ...

  9. Ubuntu上通过android toolchain交叉编译Valgrind操作步骤

    关于Valgrind的介绍可以参考:https://blog.csdn.net/fengbingchun/article/details/50196189. 这里介绍下在Ubuntu 16.04上通过 ...

  10. 【POCO】POCO学习总结(三)——交叉编译

    最小功能编译 编译选项:–minimal :只构建XML, JSON, 工具 and 网络 1 修改配置文件 $ vi poco-1.7.8p3-all/build/config/ARM-Linux ...

最新文章

  1. Kafka的生产者优秀架构设计
  2. 诺奖得主被曝40多篇论文造假!
  3. Gson把对象转成json格式的字符串
  4. C# 对象深拷贝、浅铐贝、直接拷贝(转)
  5. Golang之slice操作
  6. 【Python】简单的apscheduler定时任务
  7. spark 流式计算_流式传输大数据:Storm,Spark和Samza
  8. 安卓案例:启动和停止服务
  9. 计算机信息机房,计算机信息中心机房建设标准
  10. jvm 堆外内存_jvm┃java内存区域,跳槽大厂必会知识点
  11. Android自定义方式设置drawableleft图片大小
  12. 深刻理解:无人机数据系统应用
  13. 被积函数中有x不能直接求导_解析变限积分函数的求导问题
  14. dockers 赋权
  15. SQL优化建议(不定时更新添加)
  16. 【图像去噪】基于matlab小波变换(硬阙值+软阙值)图像去噪【含Matlab源码 391期】
  17. 【解决问题】修复虚拟机报错,写入文件时出错,请确认您有访问该目录的权限
  18. 华硕z170a如何开启m2_华硕Z170主板bios如何设置|华硕Z170主板设置bios的方法
  19. 365值得吗 office_你可能是正版受害者?吐槽Office 365坑爹之处
  20. celery beat一直不触发任务(卡在Writing entries...)

热门文章

  1. 关于LabVIEW视觉ROI的读取与存储
  2. 事件循环机制 + ES7:Async/Await(基于generator原理实现)附详细示例分析
  3. 栈的应用——表达式求值(双栈)
  4. @Repository详解
  5. 关系型数据库 vs 非关系型数据库
  6. 常用计算机键,计算机快捷键40个_计算机常用快捷键大全分享
  7. Shell命令-系统信息及显示之dmesg、uptime
  8. Docker:unauthorized: incorrect username or password.
  9. 轻松搞定JSONP跨域请求
  10. window.btoa()方法;使字符编码成base64的形式