【发布时间】:2019-07-12 09:59:35
【问题描述】:
我正在尝试在我的 Go 代码中包含 C++ 代码,但无法识别。
我首先认为它认为它是 C 代码并尝试(并失败)编译,但删除包含行实际上给了我这样的 C++ 错误故障排除
error: ‘cout’ is not a member of ‘std’
代码用 g++ 正确编译。
我尝试添加 -lstdc++ LDLFLAG,并在 CXXFLAG 中添加库的路径,但它并没有改变任何事情。
我做了一些其他测试(都失败了),但这是最小的一个。
这是 c++ 文件
test.cpp
#include "test.hpp"
int test()
{
std::cout << "Hello, World! ";
return 0;
}
test.hpp
#include <iostream>
int test() ;
这是我的 go 文件
//#cgo CXXFLAGS: -I/usr/lib/
//#cgo LDFLAGS: -L/usr/lib/ -lstdc++
//#include "test.hpp"
import "C"
func main() {
C.test()
}
我使用go build 编译,但我也尝试使用env CGO_ENABLED CGO_CXXFLAGS="-std=c++11" go build(环境部分是特定于鱼的),它返回相同的错误。
它应该可以正确编译,但我有iostream: No such file or directory。
编辑:
我尝试按照 cmets 中的建议添加 CFLAGS: -x c++,编译器在正确的位置进行搜索,但我收到另一个错误 invalid conversion from ‘void*’ to ‘_cgo_96e70225d9dd_Cfunc_test(void*)::<unnamed struct>*’ [-fpermissive],我不知道它是否与这个新标志有关
【问题讨论】:
-
我没有看到证据表明它“试图将其编译为 C 代码”,只是它找不到标准库头文件之一。
-
这不是我尝试编译的唯一代码,而且它不理解 c++ 语法,我将编辑我的问题
-
你还应该展示你是如何触发这个过程的,即你使用了什么命令。
-
其实你是对的,和C代码没有关系,我更正了问题,非常感谢
-
使用
#cgo CFLAGS: -x c++和#cgo LDFLAGS: -lstdc++