cgo 交叉编译
缘起
Go 语言除了语法精炼、并发支持好外,还有一个优点就是可以调用 C 代码。可以直接在 Go 源代码里写 C 代码,也可以引 C 语言的外部库。这样在性能遇到瓶颈的地方可以重写,或者某些功能 Go 和第三方还缺失,但 C 语言有现成的库就可以直接用了。
官方 Cgo 这块目前有一篇 博客 和 命令行文档。比如 sqlite 的 golang 驱动 go-sqlite3 就是基于 Cgo 的实现。编译本地版本,Go 本身已经支持得非常好,基本不需要额外设置,直接通过 go build
编译即可,但是要想编译其他平台的二进制版本,就需要跨平台的 $(CC)
, $(CXX)
支持。
方案
按照 Cgo 的编译思路,基本思路就是必须有一个跨平台的 C/C++ 编译器才可能实现交叉编译。
macOS
安装编译器
1
2brew install FiloSottile/musl-cross/musl-cross
brew install mingw-w64编译
在
Make
文件中指定$(CC)
,$(GCC)
为musl-cross
提供的编译器,编译安装
注:此方案未验证,有兴趣的可以自行研究