如何将Go程序与C库接口?
我一直在浏览Go的源代码,但我仍然没有弄清楚。如果有人已经这样做了,请分享一下吗?
更新: 感谢@fserb,我从Go来源发布了一些文档:
Cgo支持创建调用C代码的Go包。
用法:cgo [编译器选项] file.go
调用gcc编译软件包的C部分时,编译器选项将通过未解释的传递。
输入file.go是一个语法上有效的Go源文件,该文件导入伪包“
C”,然后引用诸如C.size_t之类的类型,诸如C.stdout之类的变量或诸如C.putchar之类的函数。如果在导入“ C”后立即添加注释,则在编译程序包的C部分时,该注释将用作标题。例如:
// #include <stdio.h> // #include <errno.h> import "C"
Cgo将输入文件转换为四个输出文件:两个Go源文件,一个用于6c(或8c或5c)的C文件和一个用于gcc的C文件。
Make.pkg中的标准软件包makefile规则可自动使用cgo。有关示例,请参见$ GOROOT / misc / cgo / stdio和$
GOROOT / misc / cgo / gmp。Cgo尚未与gccgo一起使用。
检查cgo。另外,请查看Go源代码上的misc / cgo /
gmp,以获取有关如何在Go中包装C库的示例代码。
问题内容: 我正在处理一些服务器代码,其中客户端以JSON形式发送请求。我的问题是,有许多可能的请求,每个请求的实现细节都不尽相同。因此,我想使用一个Request接口,它定义为: 从那里,我在名为如下的类中实现了接口: 为了使用JSON,我创建了一个实例并注册了一个,如下所示: 然后,如下面的代码片段所示,我使用了它: 我得到了预期的输出。 我希望做的是用类似于以下内容的内容替换该行,但是这样做
问题内容: 我这样做: 并获得此异常: 不兼容的类型:Intf不是功能接口接口Intf中存在多个非重写的抽象方法。用-Xdiags:verbose重新编译以获得完整的输出1错误 是否有任何条件不能使用lambda替换匿名类? 问题答案: 否。没有办法“克服”这一问题。功能接口必须只有一种抽象方法。您的界面有两个: 注意:您不需要注释中提到的界面注释。但是,如果您的接口不是有效的功能接口,则可以使用
问题内容: 我需要用c 编写一个库,客户端可以使用它在远程服务器上执行一些操作。我唯一还没有做的事情是:C 库需要一个C接口。让我更好地解释一下:从使用此lib的客户端中,我需要调用以下内容:int operation(void * addr); 如果int <0错误,等等。但是该库是c 中的类。所以我的答案是..是否需要一个全局变量在库中保存类的实例?开发C 类的C接口有更好的选择吗? 谢谢建议
我试图了解java中的运算符,如链接:-instanceof 但当我尝试运行以下代码时:- } 我在编译时遇到以下错误: 下面是放置src代码的目录结构:- 注意:我从
问题内容: 我已经在端口8080(默认)下启动并测试了Tomcat。现在,我将连接器端口更改为80,然后重新启动了Tomcat,在最小的Debian 6.0安装中没有任何显示。现在,这里的窍门在哪里? 问题答案: 转到/ etc / default / tomcat6并更改为