如何处理cgo中命名错误的包含?

如何处理cgo中命名错误的包含?,go,compilation,cgo,Go,Compilation,Cgo,我遇到了一个用C/C++混合编写的第三方库,其中大多数头文件都有.h文件名后缀,而.hpp后缀更合适 使用CGO的第三方库是可能的,因为它几乎不使用高级C++抽象,但是头文件需要由C++编译器编译,否则编译过程失败。 < >我可以强迫它使用C++编译器来编译C代码: env CC=g++ go build 但一旦我真正开始使用go代码库,这种方法就不起作用了,因为cgo生成的C代码在CC设置为g++时无法编译。如果我只生成带有以下内容的_cgo_export.c和_cgo_export.h文件

我遇到了一个用C/C++混合编写的第三方库,其中大多数头文件都有.h文件名后缀,而.hpp后缀更合适

使用CGO的第三方库是可能的,因为它几乎不使用高级C++抽象,但是头文件需要由C++编译器编译,否则编译过程失败。 < >我可以强迫它使用C++编译器来编译C代码:

env CC=g++ go build
但一旦我真正开始使用go代码库,这种方法就不起作用了,因为cgo生成的C代码在CC设置为g++时无法编译。如果我只生成带有以下内容的_cgo_export.c和_cgo_export.h文件:

env CC=g++ go tool cgo
然后用gcc手动编译,编译效果很好

我的问题是,我需要告诉CGO哪些文件要编译为C++文件,哪些文件要编译为C文件?< /P>
<> P>有没有一种方法来专门告诉CGO关于错误命名的C++头文件,它应该只编译那些带有C++的文件而不是C编译器?< /P>我不认为头文件是由自己编译的。头文件包含在一些
.c
.cpp
或类似文件中,并且仅在此上下文中编译。因此,这一背景是正确的是相关的。参见.<代码> cc兼容的C++编译器当然是可用的,所以不需要特殊的;只需正确命名源文件。