GO语言中gox交叉编译的实现

 更新时间:2025年11月14日 11:28:51   作者:蜡笔小新1849  
本文主要介绍了GO语言中gox交叉编译的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

最近在工作中使用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交叉编译的实现的文章就介绍到这了,更多相关GO gox交叉编译内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 详解golang函数多返回值错误处理与error类型

    详解golang函数多返回值错误处理与error类型

    这篇文章主要为大家详细介绍了golang中函数多返回值错误处理与error类型的相关知识,文中的示例代码简洁易懂,感兴趣的小伙伴快跟随小编一起学习吧
    2023-10-10
  • 基于Go语言轻松构建定时任务调度器的示例代码

    基于Go语言轻松构建定时任务调度器的示例代码

    Go 标准库 time 包提供了非常强大且简洁的支持,配合协程可轻松构建定时任务调度器,下面就跟随小编一起来了解下如何使用Go语言实现任务调度器可以定时执行任务吧
    2025-08-08
  • GoLang切片相关问题梳理讲解

    GoLang切片相关问题梳理讲解

    这篇文章主要介绍了GoLang切片相关的七个问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧
    2022-10-10
  • Go语言利用接口实现链表插入功能详解

    Go语言利用接口实现链表插入功能详解

    这篇文章主要为大家介绍了Go语言中的接口,以及如何利用接口实现链表插入功能,文中的示例代码讲解详细,感兴趣的小伙伴可以了解一下
    2022-04-04
  • Golang中switch语句和select语句的用法教程

    Golang中switch语句和select语句的用法教程

    这篇文章主要给大家介绍了关于Golang中switch和select的用法教程,文中通过示例代码将switch语句与select语句的使用方法介绍的非常详细,对大家具有一定的参考学习价值,需要的朋友们下面跟着小编一起来学习学习吧。
    2017-06-06
  • Go设计模式之原型模式讲解和代码示例

    Go设计模式之原型模式讲解和代码示例

    原型是一种创建型设计模式,使你能够复制对象,甚至是复杂对象,而又无需使代码依赖它们所属的类,本文将通过代码示例示例给大家讲解一下Go 原型模式,感兴趣的小伙伴可以参考阅读
    2023-07-07
  • 一文带你搞懂Go如何读写Excel文件

    一文带你搞懂Go如何读写Excel文件

    Excelize是一个用纯Go语言编写的库,提供了一组函数,可以对XLAM / XLSM / XLSX / XLTM / XLTX文件进行读写。支持读写由Microsoft Excel™2007及以后版本生成的电子表格文档。本文就将用它实现读写Excel文件操作,感兴趣的可以学习一下
    2022-11-11
  • Go  iota 常量基本语法介绍

    Go  iota 常量基本语法介绍

    这篇文章主要介绍了Go 为什么要设计 iota 常量,我们介绍了 Go 中 iota 的基本语法。同时基于历史资料针对 iota 到底是什么,为什么要这么叫,又有什么用进行了一番研究,需要的朋友可以参考下
    2022-06-06
  • Go语言面向对象中的多态你学会了吗

    Go语言面向对象中的多态你学会了吗

    面向对象中的多态(Polymorphism)是指一个对象可以具有多种不同的形态或表现方式,本文将通过一些简单的示例为大家讲解一下多态的实现,需要的可以参考下
    2023-07-07
  • Go获取两个时间点时间差的具体实现

    Go获取两个时间点时间差的具体实现

    本文主要介绍了Go获取两个时间点时间差的具体实现,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-04-04

最新评论