23

如何将 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 一起工作。

4

1 回答 1

20

检查cgo。此外,请查看 Go 源代码上的 misc/cgo/gmp 以获取有关如何在 Go 中包装 C 库的示例代码。

于 2009-11-19T02:16:57.133 回答