在Go中调试“不一致的定义”错误

时间:2016-10-31 15:08:02

标签: go cgo

我正在使用Go语言绑定包装一个大型复杂库。在某些时候,当我运行go build时,我开始收到以下奇怪的错误:

 inconsistent definitions for C.CString

我没有,并且库没有以任何方式定义/重新定义CString。

我发现我无法让MCVE证明问题(代码是数千行),但我确实将其发生/不发生,具体取决于是否存在单行:

 d := C.FunctionDefinedInLibHeader

当然,如果我尝试在一个最小的例子中引用它,它可以正常工作。

我的问题是:如何尝试调试此错误?我尝试使用

 go tool cgo

生成C源代码,没有任何异常(特别是CString只被调用,未定义),并且源编译得很好。我只是不明白错误消息来自哪里(特别是它不是C编译器),或者它甚至意味着什么。但是当代码中引用C函数时,它会出现,而当它不存在时,问题就会消失。

我知道有old Go bug会产生类似的错误,但在这种情况下,重复的定义是库定义的符号,而不是基本的cgo内部函数。

0 个答案:

没有答案
相关问题