如何使用gccgo构建完整的go程序二进制文件?

如何使用gccgo构建完整的go程序二进制文件?,gcc,go,gccgo,Gcc,Go,Gccgo,我注意到当使用go build时,二进制结果可能超过2MB;但是使用gccgo时,二进制文件小于35k 我在使用gccgo时注意到的另一个问题是,生成的二进制文件不能在另一个linux机器上运行(我认为缺少libgo.so),但go build二进制文件运行得很好(因此我认为是因为二进制文件包含了运行所需的所有内容?);有没有办法用gccgo实现这一点?您必须使用-static标志: 使用-static选项执行完全静态链接(gc编译器的默认设置) 您可以使用-static libgo选项静态链接

我注意到当使用
go build
时,二进制结果可能超过2MB;但是使用
gccgo
时,二进制文件小于35k


我在使用
gccgo
时注意到的另一个问题是,生成的二进制文件不能在另一个linux机器上运行(我认为缺少
libgo.so
),但
go build
二进制文件运行得很好(因此我认为是因为二进制文件包含了运行所需的所有内容?);有没有办法用gccgo实现这一点?

您必须使用-static标志:

使用-static选项执行完全静态链接(gc编译器的默认设置)


您可以使用-static libgo选项静态链接libgo,同时仍然动态链接系统库。(这仅适用于gccgo)。

对于go 1.8或更高版本,如果go是在启用CGO_=1(默认为1)的情况下构建的,则本机编译会动态链接。通过运行
go env CGO_ENABLED
检查此变量。 运行go build时,通过将环境变量CGO_ENABLED设置为0,可以切换到静态链接

CGO_ENABLED=0 go build

顺便说一句,交叉编译会自动使用静态链接。

Oops,刚才注意到这条评论中给出了答案。。。