草庐IT

CGO_ENABLED

全部标签

go - 你如何供应带有 Cgo 绑定(bind)的 Go 库?

我有一个Go1.5应用程序,它使用cgo与C库(GEOS、FWIW)绑定(bind)。我需要做的是供应它,以便它最终可以通过我们的持续集成系统进行部署。问题是我不知道如何说服链接器在出售后与库链接。运行godep后,带有cgo指令的文件是.../vendor/.../geos.go。我在那里创建了一个lib目录,添加了来自GEOS的五个.so文件,并将序言更改为以下内容:/*#cgoLDFLAGS:-L${SRCDIR}/lib-lgeos_c#include"geos.h"*/import"C"这只在一定程度上起作用——当我运行gobuild时,它找到了第一个库,但没有找到任何后续库

gcc - "go get"不只是获取文件然后 cgo +"go build"它们吗?显然不是

我在构建一个相当简单的本地CGO项目时遇到了问题。考虑thisverysmallCGOpackage只有3个文件(glut.go、support.c和support.h文件)——如果我只是去获取它,这些文件将下载到C:\Go\src\pkg\github.com\zombiezen\Go-GLUT\glut然后一些神秘的魔法发生了,goget构建了以下输出文件:C:\Go\pkg\windows_amd64\github.com\zombiezen\Go-GLUT\glut.a但是,如果我将这三个源文件复制到\mytmp,cd到\mytmp并gobuild-oglut.aglut.go

c - 如何解决函数调用中更改指针值的问题?这是一个cgo错误吗?

我这样通过cgo调用C函数:var_outptr_7C.doublevar_outptr_8C.doublevarkkuintptr=uintptr(unsafe.Pointer(&_outptr_7))gogsl.InitializeGslFunction(f)_result:=int32(C.gsl_integration_qags((*C.gsl_function)(unsafe.Pointer(f.CPtr())),C.double(a),C.double(b),C.double(epsabs),C.double(epsrel),C.size_t(limit),(*C.gsl_

c++ - 如何使用 SWIG 和 CGO 将 io.Reader 转换为 std::istream?

我正在尝试使用SWIG为使用std::istream读取二进制数据的C++API创建Go包装器。我希望能够将io.Reader传递给这些API,但我不确定如何在它和std::istream之间创建映射。我知道我需要实现一个std::streambuf子类,我假设其余部分将涉及Controller和类型映射,但我对SWIG不够熟悉,无法找出正确的组合。有什么想法吗? 最佳答案 io.Reader过于笼统,无法传递给C函数——它可能根本无法支持真实文件(它只是一个实现Read(...)函数的类)你可以做的(只要你不在windows上)是

go - 将 Go 与 cgo 和 Xlib 一起使用时出错

我试图在cgo的帮助下将C代码重写为Go,但是在尝试运行go代码时它给了我一些错误,我不知道如何解决。该代码允许在Linux桌面上获取鼠标点击的坐标。C代码:#include#include#include#includeintmain(){intx=-1,y=-1;XEventevent;intbutton;Display*display=XOpenDisplay(NULL);if(display==NULL){fprintf(stderr,"CannotconnecttoXserver!\n");exit(EXIT_FAILURE);}Windowroot=XDefaultRoot

c - golang cgo 检查C函数是否存在

我正在通过CGO链接一个库,并不是所有的实现或版本都有我想在可能的情况下使用的功能——即函数intfeature(void)的存在。有没有一种方法可以在尝试调用之前检查此符号是否已定义?任何尝试使用C.feature()都会在不支持该功能的库版本的系统上导致构建失败。如果不清楚,我想针对许多平台进行构建,这些平台可能具有也可能不具有该功能。我想我要么需要能够在运行时检查函数是否存在(更理想),要么使用go:generate进行检查并根据发现的内容更改代码(不太理想)).无论哪种方式,我都不太确定具体如何进行。 最佳答案 大多数库都带

cgo 我需要为 C 函数返回的变量释放内存吗?

我是cgo的新手,有几个关于内存管理的问题。假设我有一个简单的c函数,如下所示:char*get_str_in_arr(char**charArr,size_ti){returncharArr[i];}我是否需要如下释放内存:funcdoSomething(){cStr:=C.get_str_in_arr(feats,C.size_t(1))goStr:=C.GoString(cStr)deferC.free(unsafe.Pointer(cStr))...}如果是这种情况,我是否需要对从方法返回的任何变量执行此操作。例如c结构、uint32_t、...等

cgo 使用 c struct 数组并在 go 中赋值

我在将cgo与cstruct数组一起使用时遇到问题。我的程序如下:我在c中有结构并且包含一个指向c结构数组的指针。在C语言中,我提供了一个initialize函数(带两个参数:指向变量的指针,变量内部数组的长度)来malloc变量的内存。然后在go中,我给这个变量赋值,给variable中的数组赋值。在go中,我调用另一个C函数来使用这个变量。在C函数处理它之后。Go再次拾取变量并返回到其他Go函数。当我像这样编码时,我会像一个数组一样。type*C.struct不支持索引。我的代码如下。C:测试.htypedefstruct{intprofileCnt;_profile*profil

go - 如何使用最少的 Cgo 为 DLL 使用 Go 回调?

设置回调函数以传递给DLL函数的参数的一种方法是使用CGO...packagemain/*#cgoLDFLAGS:-L${SRCDIR}-lsomelib#include"somelib.h"externvoidCallbackString(char*s);*/import"C"import("unsafe""fmt")//exportCallbackStringfuncCallbackString(s*C.char){gostr:=C.GoString(s)//converttogolangstringfmt.Println("Gotstringfromdll(ordso):",go

mysql - 如何在使用 cgo 构建时调试/转储 Go 变量?

我正在尝试使用cgo在Go中编写一个MySQLUDF,其中我有一个基本的功能,但有一些我无法弄清楚的点点滴滴,因为我不知道一些C变量是什么是在围棋方面。这是我用C编写的一个示例,它强制MySQL参数之一的类型为intmy_boolunhex_sha3_init(UDF_INIT*initid,UDF_ARGS*args,char*message){if(args->arg_count!=2){strcpy(message,"`unhex_sha3`()requires2parameters:themessagepart,andthebits");return1;}args->arg_t