golang初学:交叉编译

go version go1.22.1 windows/amd64

Windows 11 + amd64

x86_64 x86_64 GNU/Linux

---

 

序章

golang 支持 跨平台,支持的方式 是 在一个平台 编译其它平台的可执行程序。

本文 介绍 Windows 11(开发主机) 上 编译 Linux(目标主机) 上的可执行程序。

 

#go build

 

开发主机 和 目标主机 的架构相同:x86_64

 

执行

查看 go 环境变量:

> go env

set GO111MODULE=on
set GOARCH=amd64

set GOHOSTARCH=amd64
set GOHOSTOS=windows

set GOOS=windows

……

 

修改其中的 GOOS 为 linux(全小写),命令:

>go env -w GOOS="linux"

 

执行编译:

>go build

编译 成功,生成 web001 文件——Linux 可执行的。

 

 

拷贝 web001 到 目标主机(scp 命令):

scp web001 username@iporhost:/target/directory

成功拷贝过去后,web001 是 不可执行的,使用 chmod 修改权限即可:

# chmod +x web001

 

执行&测试 web001:

# nohup ./web001 &
# ps -ef | grep web
root      439426  439378  0 20:31 pts/1    00:00:00 ./web001

web001 是一个 web程序,使用 curl 测试接口,成功,不再赘述。

 

改名

将 web001 改名为 app001,运行,成功。

 

就这么简单?

 

TODO 除了 amd64(x86_64)外,还支持那些架构呢?看了 go help build 命令的内容,应该还支持下面的 os+芯片架构 组合:

Supported only on

linux/amd64, freebsd/amd64, darwin/amd64, darwin/arm64, windows/amd64,
linux/ppc64le and linux/arm64 (only for 48-bit VMA).

两个 *asn 还提到了:linux/loong64(龙芯)。

还没用过这些参数。

 

说明,介绍 GOOS、GOARCH 的 官方文档 今天看到过,但现在 找不到了。

 

命令小结

  • >go env -w GOOS="linux"
    >go build
    >scp web001 username@iporhost:/target/directory
  • # chmod +x web001
    # nohup ./web001 &
    # ps -ef | grep web
    # curl

 

---END---

 

本文链接:

https://www.cnblogs.com/luo630/p/18170501

ben发布于博客园

参考资料

1、go build 成不同环境的方法:mac、linux、windows
php-goland@疯狂编程爱好者
已于 2022-10-10 17:20:11 修改
https://blog.csdn.net/qq_41672878/article/details/119410602

2、Win10系统下设置Go环境变量
https://www.cnblogs.com/yunfan1024/p/13497686.html

3、

 

ben发布于博客园

ben发布于博客园

 

posted @ 2024-05-02 21:21  快乐的二当家815  阅读(53)  评论(0编辑  收藏  举报