预编译Go程序的一部分,它依赖于C来提高速度

时间:2017-01-02 06:19:21

标签: c go cgo

我的Go程序的一部分依赖于使用import "C"的非常大的C代码库,需要花费几分钟来编译。有没有办法预编译C库或创建我的Go程序的一个分支,它将与C代码一起预编译,这样每次编译主程序时我都不必等待整个C库每次重新编译?

1 个答案:

答案 0 :(得分:2)

您可以将其与编译的目标文件和头文件链接,而不是导入整个C源代码。请参阅https://golang.org/cmd/cgo/,其中介绍了如何使用cgo的LDFLAGS参数。

在线还有其他文档介绍了如何将C代码编译成目标文件(.a.o文件),例如this one。您还应该参考您正在使用的库中的文档或其Makefile,因为它可能已经有指令将其编译为可以链接的目标文件。

如果具有import "C"的库及其来源未被修改,您还可以go get它,(或者可能go install)将存储其已编译的库$GOPATH/pkg中的目标文件,编译其他更快导入它的Go程序。