GO交叉编译

交叉编译,包括国产化架构

Posted by jarvis on Fri, Jul 28, 2023

交叉编译

Go语言支持交叉编译,这意味着您可以在一个操作系统上构建用于另一个操作系统的可执行程序。交叉编译非常有用,特别是当您想在不同的平台上构建和部署应用程序时。

  1. 设置Go编译器路径:首先,确保您已经正确安装了Go,并将Go编译器添加到系统路径中,以便在命令行中使用go命令。

  2. 设置环境变量:在进行交叉编译之前,需要设置GOOSGOARCH环境变量,以指定目标平台的操作系统和架构,例如:

    1$GOOS=linux GOARCH=amd64 go build -o app-linux-amd64
    2GOARCH:编译目标平台的硬件体系架构(amd64, 386, arm, ppc64等)
    3GOOS:编译目标平台上的操作系统(darwin, freebsd, linux, windows)
    

具体go支持哪些操作系统或架构可以参考:Go (Golang) GOOS and GOARCH

  1. 命名规范

    1app-操作系统-平台架构
    

申威架构编译

近期有需求要在国产申威架构下运行,所以在此总结一下坑。

目前不能支持交叉编译申威架构的程序,所以需要安装申威架构的go,然后在进行编译

  1. 从https://developer.wxiat.com/understand/ecologial/8找17版本的下载地址,下载后,根据附件里的安装使用手册安装。

  2. 在编译时会遇到golang.org/x/sys的问题

    发现报golang.org/x/sys/unix包下某些函数没有定义等错误,这是因为它找不到当前平台所对应的硬件信息文件。解决办法是,用GOROOT下的golang.org/x/sys/unix包替换vendor/golang.org/x/sys/路径下面的unix包。

    1cp -r /opt/go-sw64-1.17.7/src/cmd/vendor/golang.org/x/sys/unix/ /root/go/pkg/mod/golang.org/x/sys@xxxxxxx/
    
  3. 在工程目录下进行编译