将 Go 代码集成到现有的 C 项目中
问题:
是否可以调用 Go 代码来自 C 程序,如果是这样,这怎么可能
答案:
是的,Go 1.5 引入了 -buildmode=c-archive 模式,该模式允许将 Go 代码编译成适合链接到 C 程序的存档。要将 Go 代码集成到现有的 C 项目中:
标记要导出的函数:
编译去存档:
使用以下命令将 Go 代码编译为 C 可调用静态库:
go build -buildmode=c-archive foo.go
链接 C 程序:
在 C 程序中,包含生成的头文件:
#include "foo.h"
链接使用 -pthread 选项针对 Go 存档:
gcc -pthread foo.c foo.a -o foo
示例:
考虑以下 Go 代码(foo.go):
package main import "C" import "fmt" //export PrintInt func PrintInt(x int) { fmt.Println(x) } func main() {}
将其编译成存档:
go build -buildmode=c-archive foo.go
然后,在 C 程序 (foo.c) 中:
#include "foo.h" int main(int argc, char **argv) { PrintInt(42); return 0; }
编译它:
gcc -pthread foo.c foo.a -o foo
运行 foo 将打印“42”。
以上是如何将 Go 代码集成到我现有的 C 项目中?的详细内容。更多信息请关注PHP中文网其他相关文章!