Golang跨平台交叉编译生成其他平台的可执行文件

本文介绍了如何在不同的操作系统环境下,使用Go语言进行跨平台编译。通过设置CGO_ENABLED、GOOS和GOARCH变量,可以生成适用于Linux、Windows和Mac的64位可执行文件。当CGO_ENABLED为0时,生成的文件不依赖于动态链接库,适合在目标系统中直接运行。示例展示了在Linux环境下编译出适用于其他平台的程序,并用ldd检查了二进制文件的依赖情况。
摘要由CSDN通过智能技术生成

在linux平台下直接编译的二进制文件,无法直接在其他平台运行,今天我就遇到了在windows上运行失败,于是找了一下如何解决。

Mac 下编译 Linux 和 Windows 64位可执行程序

 CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build
 CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build

Linux 下编译 Mac 和 Windows 64位可执行程序

    CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build
    CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build

Windows 下编译 Mac 和 Linux 64位可执行程序

    SET CGO_ENABLED=0
    SET GOOS=darwin
    SET GOARCH=amd64
    go build

    SET CGO_ENABLED=0
    SET GOOS=linux
    SET GOARCH=amd64
    go build

当CGO_ENABLED=1, 进行编译时, 会将文件中引用libc的库(比如常用的net包),以动态链接的方式生成目标文件。
当CGO_ENABLED=0, 进行编译时, 则会把在目标文件中未定义的符号(外部函数)一起链接到可执行文件中。

GOOS:目标平台的操作系统(darwin、freebsd、linux、windows)

GOARCH:目标平台的体系架构(386、amd64、arm)

#CGO_ENABLED=0
$ ldd httpserver.exe 
        不是动态可执行文件
$ ldd httpserver
        linux-vdso.so.1 (0x00007ffc9bbd0000)
        libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f73c5eab000)
        libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f73c5cb9000)
        /lib64/ld-linux-x86-64.so.2 (0x00007f73c5eeb000)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

少陽君

谢谢老板的拿铁

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值