使用Golang的交叉编译生成Windows可执行文件

go语言开发的一个让人激动的特性就是可以跨平台。

同样的代码,无需修改,只要重新编译一下就可以在另一个平台下运行,而你只需要在编译的时候指定一下目标平台系统就可以了。

最常见的就是windows下开发完的应用需要跑在linux上了。拿一个已经开发完成的web程序来实践,在windows上编译出red hat linux上的应用吧。

编译到其他系统也相差无几。首先,编译使用命令行窗口进行。

SET CGO_ENABLED=0

SET GOOS=linux

SET GOARCH=amd64

go build main.go

CGO: 交叉编译不支持CGO,需要禁用

GOOS: 运行程序平台的系统

GOARCH: 运行程序平台的系统架构

其中“main.go”就是要编译的go程序了。

通常:64位架构为amd64;32位架构为386

linux: uname -a 或者 lscpu 查看系统架构

[root@VM_0_15_centos app]# uname -a

Linux VM_0_15_centos 3.10.0-862.el7.x86_64 #1 SMP Fri Apr 20 16:44:24 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux

x86_64: 为x86架构的64位拓展

扩展:linux 下编译 window

CGO_ENABLED=0

GOOS=windows

GOARCH=amd64

go build main.go

好了,咱们继续,如下图所示:

15015310-E3FB-6E75-7A9A-4BE0B5433E59.jpeg

实操的结果就是在文件main.go的路径下生成了一个main文件。

FDA11847-855B-CC7A-E0BA-E3A163B1764D.jpeg

把这个编译结果main文件及程序运行配置文件静态文件等一起复制到red hat linux中。

我这里把它放在desktop了。

0416DB44-73FC-1F88-72A1-04641E648F71.jpeg

之后打开terminal

77D927E4-DF77-CE1E-7A98-98CD55CECECD.jpeg

第一次可能需要给main程序权限

chmod 777 程序名称

我这里输入的命令是 chmod 777 main

之后就可以直接运行main程序了

./main

一般情况下,直接运行就是可以的

B97011F5-B931-7467-547C-8B99E74DC504.jpeg

欣赏一下我此次测试实践的效果

E81D2269-B7D7-B719-AE2E-356FD93DFC91.jpeg

如果你想停掉这个应用。先ps命令找到这个应用

0B2FF654-606D-14DC-B0F6-5A3990982F96.jpeg

PID3752那行就是目标应用进程了

使用kill命令,关掉这个进程

kill3752

7C1083BA-0A08-9A61-329E-158149D15C60.jpeg

再刷新浏览器就发现应用已经停止了

EFF91174-2E16-0FED-49B8-B22B0DFE2D12.jpeg

应用停止了,网页自然就打不开了

现在重新运行起来

9A4E9D87-5230-9479-608E-EAE571DB1C4B.jpeg

刷新浏览器,一切又都恢复正常了。

收藏 (0)
评论列表
正在载入评论列表...
我是有底线的