golang交叉编译

  • demo test

    package main
    
    import (
        "fmt"
        "runtime"
    )
    
    func main() {
        fmt.Println("Test os")
        fmt.Println(runtime.GOOS)
    }
    

    %E5%A4%9A%E5%B9%B3%E5%8F%B0%E7%BC%96%E8%AF%91%20ae08fc6af83341afa18993bd8cc7b35f/Untitled.png

通过设置 GOOS=windows/linux/drawin...,可以在windwos上编译出不同平台的可执行程序


  • 区分平台的代码

    通过 +build 标识编译平台,必须和 package 之间有一个空行

    %E5%A4%9A%E5%B9%B3%E5%8F%B0%E7%BC%96%E8%AF%91%20ae08fc6af83341afa18993bd8cc7b35f/Untitled%201.png

  • windows

    %E5%A4%9A%E5%B9%B3%E5%8F%B0%E7%BC%96%E8%AF%91%20ae08fc6af83341afa18993bd8cc7b35f/Untitled%202.png

  • linux

    %E5%A4%9A%E5%B9%B3%E5%8F%B0%E7%BC%96%E8%AF%91%20ae08fc6af83341afa18993bd8cc7b35f/Untitled%203.png

  • 路由器 mipsle

    // 设置系统
    set GOOS=linux
    // 设置CPU架构
    set GOARCH=mipsle
    // go模拟软浮点类型
    set GOMIPS=softfloat
    // 删除符号表和调试信息
    go build -ldflags "-w -s"
    

静态编译链接

go build -ldflags "-linkmode external -extldflags -static" .