Golang的交叉编译问题

news/2024/12/29 16:10:58/

参考:Golang交叉编译各个平台的二进制文件 - Go语言中文网 - Golang中文社区 (studygolang.com)、也谈Go的可移植性 | Tony Bai

今天准备将一个在Mac上开发的Golang项目部署到云服务器上进行部署上线,于是通过go build将项目编译成mac下的Unix可执行二进制文件上传到了CentOS云服务器准备运行,但此时报了一个错:

-bash: ./Technology-Learning-Community: cannot execute binary file

经过查询,导致这种情况的原因一般有两种:

  • 一是缺少执行权限,于是我尝试通过sudo执行和chmod +x来增加权限,但是仍然无法解决。
  • 二是编译环境的不同,mac下二进制文件与linux下是不兼容的,经过问题的不断查询,了解到Golang交叉编译的概念。

所谓交叉编译,就是在一个平台上生成另一个平台的可执行程序,这也就是Golang能够实现可移植性的原因之一。我们在go build前设置编译的参数即可方便的生成其他平台的二进制文件:

# mac上编译linux和windows二进制
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build main.go
CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build main.go# linux上编译mac和windows二进制
CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build main.go
CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build main.go# windows上编译mac和linux二进制
SET CGO_ENABLED=0 SET GOOS=darwin SET GOARCH=amd64 go build main.go
SET CGO_ENABLED=0 SET GOOS=linux SET GOARCH=amd64 go build main.go

其中用到的三个变量就是go env中的配置参数,我们可以通过go help environment查看参数的详细含义:

  • CGO_ENABLED:是否开启CGO,CGO即在Go代码中调用C代码交叉编译,但是交叉编译是不支持CGO的,也就是说如果你的代码中存在C代码,是编译不了的,所以需要禁用它

    Whether the cgo command is supported,Either 0 or 1

  • GOOS:指定目标平台的操作系统

    The operating system for which to compile code,Examples are linux, darwin, windows, netbsd

  • GOARCH:执行目标平台的操作系统架构

    The architecture, or processor, for which to compile code,Examples are amd64, 386, arm, ppc64.


http://www.ppmy.cn/news/605473.html

相关文章

vim用法

<h1>Linux vi/vim </h1>所有的 Unix Like 系统都会内建 vi 文书编辑器&#xff0c;其他的文书编辑器则不一定会存在。 但是目前我们使用比较多的是 vim 编辑器。 vim 具有程序编辑的能力&#xff0c;可以主动的以字体颜色辨别语法的正确性&#xff0c;方便程序设…

LeetCode简单题之删除字符串中的所有相邻重复项

题目 给出由小写字母组成的字符串 S&#xff0c;重复项删除操作会选择两个相邻且相同的字母&#xff0c;并删除它们。 在 S 上反复执行重复项删除操作&#xff0c;直到无法继续删除。 在完成所有重复项删除操作后返回最终的字符串。答案保证唯一。 示例&#xff1a; 输入&…

vue项目中多环境打包指令配置

由于现在的项目打包本地服务器和客户的服务器的需求&#xff0c;所以需要添加多环境的打包的指令。过程比较简单&#xff1a; 1.首先要在跟文件夹下建立.env 比如 .env.pro1和.env.pro2。 其中内容主要包括&#xff1a; NODE_ENVproduction VUE_APP_API_BASE_URLxxx主要区别就…

MySQL索引面试题必备

MySQL索引必问面试题1. 什么是索引2. 索引分类3. 索引的基本操作主键索引的创建普通索引的创建唯一索引的创建复合索引的创建4. 索引的底层原理5. 聚簇索引和非聚簇索引6. 无法利用索引的情况参考&#xff1a;https://www.bilibili.com/video/BV19y4y127h4?p3https://www.cnbl…

虚拟机环境下Centos7操作系统的详细安装教程

20240402 https://www.osyunwei.com/archives/7829.html centos 7 安装 一、虚拟机概念 虚拟机软件&#xff0c;有些时候想模拟出一个真实的电脑环境&#xff0c;碍于使用真机安装代价太大&#xff0c;因此而诞生的一款可以模拟出虚拟计算机并运行操作系统的软件。 虚拟机软…

LeetCode简单题之第 k 个缺失的正整数

题目 给你一个 严格升序排列 的正整数数组 arr 和一个整数 k 。 请你找到这个数组里第 k 个缺失的正整数。 示例 1&#xff1a; 输入&#xff1a;arr [2,3,4,7,11], k 5 输出&#xff1a;9 解释&#xff1a;缺失的正整数包括 [1,5,6,8,9,10,12,13,…] 。第 5 个缺失的正整数…

Docsify个人网站搭建详细教程

目录一、什么是 docsify二、安装 docsify三、多页文档设置四、定制化配置4.1、侧边栏4.2、导航栏4.3、封面4.4、主题五、部署5.1、部署到Gitee5.2、部署到云服务器一、什么是 docsify docsify是一个有魔法的文档网站生成器&#xff0c;它能够动态生成您的文档网站。与GitBook、…

vmware虚拟机怎么让窗口自动调整大小适应主机

vmware是一款非常好用的虚拟机&#xff0c;大部分用户都会用vmware安装各种操作系统&#xff0c;安装后可能会出现一个问题&#xff0c;就是主机屏幕太小&#xff0c;无法完整显示VMware虚拟机界面&#xff0c;这时候就可以设置让VMware自动适应主机窗口&#xff0c;一起来了解…