之前发过一篇 Go 语言TensorFlow 跨平台编译及运行 ,讲了如何通过对应平台来编译TensorFlow。而在实际开发中,我们往往要使用交叉编译来实现跨平台部署,这两天查阅资料,发现之所以TensorFlow跨平台编译失败,是因为使用了cgo来调用TensorFlow C。今天我们就来深入了解下,怎么处理带CGO的交叉编译。
在没有CGO调用的情况下,交叉编译只需带上三个参数便可以实现
或者加上可选参数
CGO_ENABLED 这个参数默认为1,开启CGO。需要指定为0来关闭,因为CGO不支持交叉编译。
GOOS 和 GOARCH 用来指定要构建的平台为Linux
-ldflags
-s -w--extldflags "-static -fpic"
显然对于带CGO的交叉编译,CGO_ENABLED必须开启。这也就需要辅助编译器来帮我们实现交叉编译了。
如果你是mac平台,可以用这个工具 FiloSottile/musl-cross/musl-cross 直接通过brew安装就可以使用
安装成功后,有多种编译器可以帮我们实现交叉编译,使用时只需在编译对应参数下指定就可以了。
通过CC=x86_64-linux-musl-gcc 来指定GCC编译器。而CGO_LDFLAGS="-static"来指定CGO部分的编译为静态编译。
PATH
【来思Go】,Let's Go!专注分享技术干货,欢迎关注留言交流学习!