开发者社区> 问答> 正文

go程序在当前系统编译的只能在当前系统运行,在其它系统运行报错

当前Mac系统运行如下

jiangyd:src jiangyd$ go build he.go
jiangyd:src jiangyd$ ./he
name is:  test
18

把程序拷贝到Linux系统运行报错

# ./he
-bash: ./he: cannot execute binary file

展开
收起
道月芬1 2021-10-21 08:29:32 22902 0
4 条回答
写回答
取消 提交回答
  • Mgo

    GO程序支持跨平台的,编译的时候姿势不对。 我编译的姿势如下:(目前在windows,ubuntu,centos可用,亲测.

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

    2022-03-10 12:12:47
    赞同 展开评论 打赏
  • Xf

    buzdhi

    2022-02-22 10:55:09
    赞同 展开评论 打赏
  • 网络规划设计师、敏捷专家、CISP、ITSS服务经理、ACA全科目、ACP4项、ACE、CBP、CDSP、CZTP等。拥有 PRINCE2 Foundation/Practitioner、CCSK、ITIL、ISO27001、PMP等多项国际认证。 专利5+、期刊10+、知识产权师。核心期刊审稿人。

    您好,如果您尝试如下交叉编译方式不行的话,很有cpu的类型不同,同样是x64,但内核还是不同的,单用amd64是不能区分的。

    1.Mac

    Mac下编译Linux, Windows平台的64位可执行程序:

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

    2.Linux

    Linux下编译Mac, Windows平台的64位可执行程序:

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

    3.Windows

    Windows下编译Mac, Linux平台的64位可执行程序:

    SET CGO_ENABLED=0
    SET GOOS=darwin3
    SET GOARCH=amd64
    go build main.go
    
    
    SET CGO_ENABLED=0
    SET GOOS=linux
    SET GOARCH=amd64
    go build main.go
    
    

    GOOS:目标可执行程序运行操作系统,支持 darwin,freebsd,linux,windows GOARCH:目标可执行程序操作系统构架,包括 386,amd64,arm

    2021-10-21 09:34:28
    赞同 展开评论 打赏
  • 交叉编译的问题 详情请查看

    2021-10-21 09:06:14
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
Go语言路上踩过的坑 立即下载
gohbase :HBase go客户端 立即下载
Go构建日请求千亿级微服务实践 立即下载