Golang交叉编译(跨平台编译)的使用

简介: 存在交叉编译的情况时,cgo 工具是不可用的。在标准 go 命令的上下文环境中,交叉编译意味着程序构建环境的目标计算架构的标识与程序运行环境的目标计算架构的标识不同,或者程序构建环境的目标操作系统的标识与程序运行环境的目标操作系统的标识不同

在CMD命令行中编译

设置Linux编译环境

SET CGO_ENABLED=0
set GOARCH=amd64
set GOOS=linux
//CGO_ENABLED=0 GOOS=linux GOARCH=arm GOARM=7
// 开始编译
go build -o ./build/ ./main.go
在windows10之前的系统版本上使用cmd命令行可以使用上述命令编译
复制代码

powershell命令行中

在powershell命令行中编译(示例编译64位linux程序)

// 设置Linux编译环境
$env:CGO_ENABLED="0"
$env:GOOS="linux"
$env:GOARCH="amd64"
// 开始编译
go build -o ./build/ ./main.go
复制代码

一、CGO_ENABLED

作用:

用于标识(声明) cgo 工具是否可用

意义:

存在交叉编译的情况时,cgo 工具是不可用的。在标准 go 命令的上下文环境中,交叉编译意味着程序构建环境的目标计算架构的标识与程序运行环境的目标计算架构的标识不同,或者程序构建环境的目标操作系统的标识与程序运行环境的目标操作系统的标识不同

关闭 cgo 后,在构建过程中会忽略 cgo 并静态链接所有的依赖库,而开启 cgo 后,方式将转为动态链接

二、GOOS

用于标识(声明)程序构建环境的目标操作系统

如:linux 、windows

三、GOARCH

用于标识(声明)程序构建环境的目标计算架构,若不设置,默认值与程序运行环境的目标计算架构一致

系统 GOOS GOARCH
Windows 32 位 windows 386
Windows 64 位 windows amd64
OS X 32 位 darwin 386
OS X 64 位 darwin amd64
Linux 32 位 linux 386
Linux 64 位 linux amd64

四、GOHOSTOS

用于标识(声明)程序运行环境的目标操作系统

五、GOHOSTARCH

用于标识(声明)程序运行环境的目标计算架构

六、go build

  • -a强制重新编译,简单来说,就是不利用缓存或已编译好的部分文件,直接所有包都是最新的代码重新编译和关联
  • -installsuffix
  • 作用:在软件包安装的目录中增加后缀标识,以保持输出与默认版本分开
  • 补充:如果使用 -race 标识,则后缀就会默认设置为 -race 标识,用于区别 race 和普通的版本
  • -o指定编译后的可执行文件名称

后台运行

//修改权限命令
chmod 777 程序名称
//后台运行的命令
nohup ./程序名 & 
//不输出错误信息
nohup ./程序名 >/dev/null 2>&1 &
//如果要关闭程序,可以使用命令”ps” 查看后台程序的pid,然后使用“kill 程序pid”命令,关闭程序比如程序名为test,可以用如下命令查询
ps aux|grep test
//关掉进程
kill 进程编号
//开机启动glang
vi /etc/rc.local
cd gopath
nohup ./main &
复制代码

1.nohup

  1. 用途:不挂断地运行命令。
  2. 语法:nohup Command [ Arg … ] [ & ]
  • 无论是否将 nohup 命令的输出重定向到终端,输出都将附加到当前目录的 nohup.out 文件中。
  • 如果当前目录的 nohup.out 文件不可写,输出重定向到 $HOME/nohup.out 文件中。
  • 如果没有文件能创建或打开以用于追加,那么 Command 参数指定的命令不可调用。
  1. 退出状态:该命令返回下列出口值:   
  • 126 可以查找但不能调用 Command 参数指定的命令。   
  • 127 nohup 命令发生错误或不能查找由 Command 参数指定的命令。   
  • 否则,nohup 命令的退出状态是 Command 参数指定命令的退出状态。

2. &

用途:在后台运行

一般两个一起用

nohup command &

nohup redis-server ./main >/dev/null 2>&1 &
复制代码

查看运行的后台进程

(1)jobs -l

(2)ps -ef

ps -aux|grep test.js
复制代码
  • a: 显示所有程序
  • u: 以用户为主的格式来显示
  • x: 显示所有程序,不以终端机来区分

3. windows上

windows 上面用

go build -ldflags "-s -w -H=windowsgui"

  • -s 省略符号表和调试信息
  • -w Omit the DWARF symbol table 省略DWARF符号表
  • -H windowsgui  不打印信息到console (On Windows, -H windowsgui writes a "GUI binary" instead of a "console binary."),就不会有cmd窗口了

curl 命令测试

curl发送参数名字username 和pwd 是页面定义的两个参数名字,form1 是页面定义的表单的名字。

curl  -d "username=test&pwd=123456"  http://serverIP/webAuth/index.htm/form1


相关文章
|
4月前
|
编译器 测试技术 Go
Go语言的自给自足:编译自身的神奇之旅
Go语言的自给自足:编译自身的神奇之旅
|
Go 区块链
go 编译 自定义 图标 ico文件
go 编译 自定义 图标 ico文件
93 0
|
Go Windows
Go 交叉编译 跨平台编译(windows系统跨平台编译)
Go 交叉编译 跨平台编译(windows系统跨平台编译)
94 0
|
1月前
|
Go
go语言编译时常量表达式
【10月更文挑战第20天】
34 3
|
1月前
|
编译器 Go
go语言编译选项
【10月更文挑战第17天】
42 5
|
1月前
|
Go
go语言使用常量和编译时常量表达式
【10月更文挑战第19天】
29 2
|
4月前
|
编译器 Go 开发者
Go 在编译时评估隐式类型的优点详解
【8月更文挑战第31天】
36 0
|
7月前
|
自然语言处理 安全 Java
速通Go语言编译过程
Go语言编译过程详解:从词法分析(生成token)到句法分析(构建语法树),再到语义分析(类型检查、推断、匹配及函数内联)、生成中间码(SSA)和汇编码。最后,通过链接生成可执行文件。作者sharkchili,CSDN Java博客专家,分享技术细节,邀请读者加入交流群。
59 2
|
6月前
|
缓存 应用服务中间件 Go
Go打包和部署:从编译到运行的全指南
本文介绍了Go语言项目的打包和部署方法,包括使用`go run`、`go build`和`go install`命令进行编译,以及跨平台交叉编译。文章还提到了编译参数如`-x`、`-n`和`-race`等。此外,还讨论了如何利用第三方工具(如go-bindata)打包非Go文件,以及清理编译缓存和压缩二进制文件。最后,文中展示了如何使用supervisor和Docker进行部署,并提供了Nginx的反向代理配置示例。
2362 1
|
自然语言处理 编译器 Linux
超详细!通晓Go语言编译运行 你需要这篇攻略 | 进阶指南
超详细!通晓Go语言编译运行 你需要这篇攻略 | 进阶指南
869 0
超详细!通晓Go语言编译运行 你需要这篇攻略 | 进阶指南