golang相对于c/c++的优点之一是更容易编译跨平台应用程序,无需为每个平台编写适配代码。 与JAVA相比,它对系统环境要求较低,不需要预装JDK等适配环境。
去建造
这里以frp项目的跨平台编译脚本为例
编译 linux/amd64 版本的应用程序:
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -ldflags "-s -w" -o frpc_linux_amd64 ./cmd/frpc
编译 windows/amd64 版本的应用程序:
CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build -ldflags "-s -w" -o ./frpc_windows_amd64.exe ./cmd/frpc
在linux上编译出windows的exe文件后,可以直接复制到windows机器上运行。
GOOS表示目标平台的操作系统。 GOARCH表示目标平台的架构,通常386表示32位系统,amd64表示64位系统。 可以通过go tool dist list查看支持的操作系统和对应的平台。
-s -w 是去掉编译时的符号信息和调试信息window golang源码编译,减少编译后的程序文件的大小,这个没有必要。 CGO_ENABLED=0可以禁用cgo编译,跨平台兼容性会更好。
限制代码仅在特定平台上编译
有时候我们总是想为不同平台的应用程序编写特殊的代码,这可以通过在Go文件中添加 //+build 注释来实现。
例如window golang源码编译,Go文件开头存在以下注释
// +构建 linux,386 darwin,!cgo
表示该文件仅在linux/386或darwin(No cgo)环境下编译。 在其他环境中该文件将不会被编译。
这样,我们就可以为不同的平台编写相同代码的不同实现。
其他注意事项
发表评论