将Go文件集成到现有的C项目中

时间:2018-10-11 23:13:38

标签: c go gcc makefile linker

我有一个用C编写的大型项目,我编写了一个Go脚本,该脚本具有要从C代码( C-> Go )中调用的功能。此相同的Go函数还需要调用某些C函数( Go-> C )。

这里是项目结构的简化视图:

- src/...
- src/file_c.h
- src/file_c.c
- src/gocode/file_go.go
- src/Makefile

这是我想做的事情:

  • file_c.c需要包含file_go.h(C-> Go)。
  • file_go.go需要包含file_c.h(Go-> C)。
  • C软件有自己的大Makefile,我想继续使用该Makefile进行编译。最后要运行的二进制文件也将来自现有的C代码(并在执行过程中调用Go函数)。

到目前为止我尝试过的事情:

在文件file_go.go中,在import "C"语句之前,我添加了以下几行:

// #cgo CFLAGS: -I..
// #include "file_c.h"

然后我尝试使用两个命令编译file_go.go

go build -buildmode=c-shared file_go.go
go build -buildmode=c-archive file_go.go

但是,在两种情况下,我都得到了undefined reference to func类型的错误消息,其中func是C函数(在file_c.h中声明并在file_c.c中定义)从Go代码。

如果我从file_go.go中的Go-> C中删除了调用,那么它将正确编译,并且可以在C Makefile中正确包含file_go.h。但是,我也需要Go文件来调用该C函数。

如何以正确链接C函数的方式构建Go文件?

0 个答案:

没有答案