最近在工作中使用GO语言进行编码开发,因为项目中的环境时arm64,所以总是需要交叉建议,在arm下才能正确运行,GO语言还是非常强大的,在windows下就可以交叉编译各个环境的二进制文件,Gox是Go交叉编译的一种简单,简洁的工具,其行为类似go build。

一、安装

要安装Gox,请使用go get。我们标记版本,因此可以随时签出该标记并进行编译。安装成功后会生成gox命令行,使用gox --help

go get github.com/mitchellh/gox

二、使用

使用命令gox --osarch-list可以查看默认的编译环境,如下为显示的部分内容。

gox --osarch-list
Supported OS/Arch combinations for go1.17.4 are shown below. The "default"
boolean means that if you don't specify an OS/Arch, it will be
included by default. If it isn't a default OS/Arch, you must explicitly
specify that OS/Arch combo for Gox to use it.darwin/386      (default: true)
darwin/amd64    (default: true)
linux/386       (default: true)
linux/amd64     (default: true)
linux/arm       (default: true)
freebsd/386     (default: true)
freebsd/amd64   (default: true)
openbsd/386     (default: true)
openbsd/amd64   (default: true)
windows/386     (default: true)
windows/amd64   (default: true)
freebsd/arm     (default: true)
netbsd/386      (default: true)
netbsd/amd64    (default: true)
netbsd/arm      (default: true)
plan9/386       (default: false)
dragonfly/386   (default: false)
dragonfly/amd64 (default: false)
nacl/amd64      (default: false)
nacl/amd64p32   (default: false)

如果想指定一个环境进行编译,则可以使用参数--osarch

gox --osarch="linux/arm64"

或者,只编译linux环境的二进制文件

gox -os="linux" 

三、遇到的问题

1、开启CGO

在使用过程中,因为工程中包含C语言的库文件,因此在编译的时候需要开启CGO,CGO可以通过GO的环境变量设置。

go env -w CGO_ENABLED=1

在设置完成后,执行gox报错了,但是具体看不出来是什么问题,于是我使用了go build查看,具体执行如下:

go build -tags=unix
# TrustZone/lib
cgo: C compiler "gcc" not found: exec: "gcc": executable file not found in %PATH%

可以看出,我的电脑上没有安装gcc的编译工具。安装过程,此处就不再赘述了。

2、修改环境变量

此处修改GO语言的环境变量,我是想不通过GOX命令工具实现交叉编译,于是我修改了环境变量:GOOS=linux、GOARCH=arm64。

还有上步设置的开启CGO,CGO_ENABLED,共三个环境变量。

于是问题出现了!!!

在其他go的工程中,三个环境变量也生效了,导致我点击调试按钮时,提示如下:

API server listening at: [::]:58306
could not launch process: not an executable file调试器完成,并显示退出代码 1

刚开始并不知道是什么原因,没有生成可执行的文件。但是使用go build还是可以生成,仔细一想,原来在其它工程中设置的环境变量生效了,导致生成了linux环境下的可执行文件,所以这里才会提示没有可执行文件。将环境变量改回去即可正常开启调试!!!

在此记录下这两个问题

GO语言-gox交叉编译相关推荐

  1. go gox交叉编译

    go 使用gox 交叉编译 1.安装gox go get github.com/mitchellh/gox 测试:命令行输入gox -h,应该会用输出的,不然你要检查下PATH变量设置的是否正确 $g ...

  2. 使用go语言进行交叉编译的时候遇到的一些问题

    最近一直在搞go的开发,开发的程序会部署在一套hadoop集群中,我本地的开发环境是使用macos进行代码编写,然后放到virtualbox中的hadoop集群去运行,而vbox中的机器又是linux ...

  3. go语言交叉编译 - 附xgo踩坑之旅

    纯Go代码 举例: frp的交叉编译配置: env CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build -trimpath -ldflags "$ ...

  4. golang语言-1-go普及知识

    Go 语言的官方网站是 golang.org,这个站点采用 Python 作为前端,并且使用 Go 语言自带的工具 godoc 运行在 Google App Engine 上来作为 Web 服务器提供 ...

  5. 字符大小端aix linux,Go交叉编译的那些事

    最近两个月,一直在搞项目的国产化移植,把golang开发好的程序,运行在国产化平台上,操作系统基本都是基于Linux,但是CPU架构除了x86,还有ARM和MIPS,我们平时的Golang都是运行于x ...

  6. ARM环境中的c语言socket进程通信-转

    近由于需要弄一些android底层的进程间通讯的东西,所以重温了一下linux的进程通信知识. 进程间通信有很多种方法,使用socket只是其中的一种方法,使用socket的好处呢,就是通用,代码可以 ...

  7. 第01章 golang语言

    Go语言(或 Golang)起源于 2007 年,并在 2009 年正式对外发布.Go 是非常年轻的一门语言,它的主要目标是"兼具 Python 等动态语言的开发速度和 C/C++ 等编译型 ...

  8. go语言学习:语言简介

    一.Go语言简介 Go语言(或 Golang) 起源于 2007 年,并在 2009 年正式对外发布.Go 是非常年轻的一门语言,它的主要目标是"兼具 Python 等动态语言的开发速度和 ...

  9. 轻松玩转树莓派Pico之三、Windows+Ubuntu虚拟机模式下VSCode C语言开发环境搭建

    目录 1.VSCode下载与安装 2.VSCode基础插件安装 3.SSH连接与配置 4.SSH免密登录 5.Pico编译 工欲善其事,必先利其器.之前的介绍的Pico流程都是通过命令行编译,没有进行 ...

最新文章

  1. R语言exists函数检查数据对象是否存在实战
  2. Maven详解之聚合与继承
  3. 计算机领域中随处可见的抽象
  4. python才能做爬虫,No,C#也可以!
  5. 软考初级——计算机系统基础知识
  6. xml笔记(马士兵)
  7. WebView 指南
  8. android base64 字符串,Android 文件转base64字符串
  9. python图书库存管理系统的需求分析_图书库存管理系统方案.doc
  10. 【模仿学习】南京大学港中文联合总结: 29页中文详述模仿学习完整过程
  11. SQLite崩溃处理
  12. 杰理之低延时无线麦功能支持以下三种组合配置【篇】
  13. android 充话费接口,调用手机话费充值API的SDK编写思路
  14. oracle11g ora12170,11g告警日志中大量ORA-12170错误
  15. thinkadmin
  16. 机器学习-白板推导系列(一)-绪论(机器学习的MLE(最大似然估计)和MAP(最大后验估计))
  17. XPC connection interrupted
  18. 二十一世纪大学英语读写教程学习笔记(原文)——6 - Nerds and Geeks(书呆子和极客)
  19. 关于通视域分析和日照分析
  20. 赞助商:Divi 2.4

热门文章

  1. 函数及其应用(2)——湖南工商大学
  2. 张宇基础30讲 第14讲
  3. 数据分析——数据清洗之文字特征编码
  4. 计算机一级桌面,让Windows桌面显示InternetExplorer
  5. 生活污水处理设备生产制造技术标准有哪些?
  6. redhat和ubuntu命令区别
  7. 百度地图API之行政区域边界
  8. 中国工程院谭建荣:人工智能应用得再好,最核心的算法不行,创新能力就不行丨MEET2021
  9. 论文被《现代计算机》录用后,《现代计算机》旬刊征稿
  10. 解决pip3 install mysqlclinet 报错 OSError: mysql_config not found