我正在使用Go语言绑定包装一个大型复杂库。在某些时候,当我运行go build
时,我开始收到以下奇怪的错误:
inconsistent definitions for C.CString
我没有,并且库没有以任何方式定义/重新定义CString。
我发现我无法让MCVE证明问题(代码是数千行),但我确实将其发生/不发生,具体取决于是否存在单行:
d := C.FunctionDefinedInLibHeader
当然,如果我尝试在一个最小的例子中引用它,它可以正常工作。
我的问题是:如何尝试调试此错误?我尝试使用
go tool cgo
生成C源代码,没有任何异常(特别是CString
只被调用,未定义),并且源编译得很好。我只是不明白错误消息来自哪里(特别是它不是C编译器),或者它甚至意味着什么。但是当代码中引用C函数时,它会出现,而当它不存在时,问题就会消失。
我知道有old Go bug会产生类似的错误,但在这种情况下,重复的定义是库定义的符号,而不是基本的cgo内部函数。