3

假设我的包工作区有github.com/yada/yada第三方包。在这个包里面有一个yoda.go.h我想重用的标题(不确定这是否是一个好主意,但这是一个新问题)。如何将依赖包中的标头导入我自己的包中?

package main

// #cgo pkg-config: my-dep other-dep
// #include <someHeader.h>
// #include <otherHeader.h>
// #include github.com/yada/yada/yoda.go.h // doesn't work :(
import "C"

除了是一个好主意之外,我仍然想知道它是否可能。

PS:如果你认为这真的是一个坏主意,我应该怎么做呢?

4

2 回答 2

3

使用 CGO CFLAGS 指令来引用其他包含路径。

//#cgo CFLAGS: -I $GOPATH/src/github.com/yada/yada/
...
//#include "yoda.go.h"
import "C"

更正

go 工具在构建期间不会扩展 $GOPATH 变量。相反,应该在那里使用完整路径。更正的代码:

//#cgo CFLAGS: -I /full/path/to/src/github.com/yada/yada/
//#include "yoda.go.h"
于 2014-12-05T17:29:10.627 回答
1

尝试直接引用它可能不是一个好主意,因为它不是导出的实体,并且可能会更改或删除。

如果您确实需要该标头,则必须直接在本地文件系统中引用它。(当然你也可以自由地复制到你的项目中)

于 2014-12-05T13:45:58.383 回答