如何将 Go 程序与 C 库接口?
我一直在浏览 Go 的源代码,但仍然没有弄明白。如果有人已经这样做了,你能分享一下吗?
更新:感谢@fserb,我发布了一些来自 Go 资源的文档:
Cgo 允许创建调用 C 代码的 Go 包。
用法:cgo [编译器选项] file.go
当调用 gcc 来编译包的 C 部分时,编译器选项会通过未解释的方式传递。
输入 file.go 是一个语法有效的 Go 源文件,它导入伪包“C”,然后引用诸如 C.size_t 之类的类型、诸如 C.stdout 之类的变量或诸如 C.putchar 之类的函数。
如果“C”的导入紧跟在注释之前,则在编译包的 C 部分时,该注释将用作标题。例如:
// #include <stdio.h> // #include <errno.h> import "C"
Cgo 将输入文件转换为四个输出文件:两个 Go 源文件,一个用于 6c(或 8c 或 5c)的 C 文件,以及一个用于 gcc 的 C 文件。
Make.pkg 中的标准包 makefile 规则使使用 cgo 的过程自动化。有关示例,请参见 $GOROOT/misc/cgo/stdio 和 $GOROOT/misc/cgo/gmp。
Cgo 还不能与 gccgo 一起工作。