1
125
更新: 我已经成功地把一个小的测试C++类与GO连接起来了。 如果用C接口包装C++代码,则应该能够用CGO调用库(参见GOOOT/MISC/CGO/GMP中的GMP示例)。 我不确定C++中一个类的概念是否真的可以在GO中表达,因为它没有继承。 下面是一个例子: 我有一个C++类定义为:
我想用在围棋上。我将使用C接口
(我用
实施情况如下:
完成所有这些之后,go文件是:
我用来编译这个的makefile是:
尝试使用以下方法进行测试:
您需要使用make install安装共享库,然后运行make test。预期输出为:
|
2
36
目前看来,Swig是最好的解决方案: http://www.swig.org/Doc2.0/Go.html 它支持继承,甚至允许用GO结构来对C++类进行子类化,所以当在C++代码中调用重写方法时,会启动GO代码。 Section about C++ in Go FAQ 更新了,现在提到swig,不再说 因为Go是垃圾收集,所以这样做是不明智的,至少是幼稚的 “。 |
3
31
你还不能完全从我读到的 in the FAQ :
|
4
22
至于GOD1.+,CGO自动合并并编译C++代码: |
5
10
看来这是关于歌朗的早期问题之一。同时回答永不更新。在这三到四年中,有太多的新图书馆和博客文章被删除了。以下是我觉得有用的几个链接。 Calling C++ Code From Go With SWIG |
6
7
我创建的以下示例基于
Scott Wales' answer
. 我在Macos High Sierra 10.13.3跑步中测试过
(1)代码
(2)代码
(3)代码
(4)代码
(5)最后,
使用以下生成文件
我可以运行下面的示例程序:
重要的
上面的评论
|
7
3
有人在谈论 interoperability between C and Go 当使用gcc go编译器时,gcc go。但是,在使用GCCGO时,对互操作性和已实现的Go功能集都有限制(例如,有限的Goroutines,没有垃圾收集)。 |
8
2
你走在未知的领域。 Here 是调用C代码的好例子,也许在阅读完 C++ name mangling 还有召唤约定,还有很多尝试和错误。 如果你还想试试,祝你好运。 |
9
1
这里的问题是,兼容实现不需要将类放在compile.cpp文件中。如果编译器可以优化类的存在,只要程序在没有类的情况下以相同的方式运行,那么它就可以从输出可执行文件中省略。 C有一个标准化的二进制接口。因此,您将能够知道您的函数是导出的。但是C++背后没有这样的标准。 |
10
1
有趣的是,这一声明引发了多少更广泛的问题。丹·莱克在他的网站flutrby上进行了一次非常有趣和深思熟虑的关于发展的讨论。 Interprocess Standards 作为一种引导新语言(和其他分支)的方法,但这就是这里的德语。 |
11
1
您可能需要添加
|
rookie · 检查函数模板的所有参数包参数是否属于int 1 年前 |
ivaigult · -W转换和隐式字符串到布尔类型转换 1 年前 |
rainer · 后台插入程序的初始化 1 年前 |
Community wiki · 以理智、安全和高效的方式复制文件 1 年前 |
Shefali Kanaujia · 对C中向量的向量进行排序++ 1 年前 |
Ma Joonyoung · 粗粒度和细粒度链表的时间比较 1 年前 |