草庐IT

CGO_CFLAGS

全部标签

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

c++ - Golang CGO异常0x40010006

我正在尝试使用cgo从dll运行函数。该库是用C++编写的,所以我在这里创建了一个C头文件,其中包含定义的函数和一个.cpp。文件在哪里实现。库.h:#ifdef__cplusplusextern"C"{#endifvoid*LoadEngine(char*);#ifdef__cplusplus}#endiflib.cpp:#include//thelibraryvoid*LoadEngine(char*sn){Engine*e;GetEngineObject(sn,&e);//functionfromthedll,hereitfailsreturn(void*)e;}然后调用它:pa

在 Go 中更改 WebKitWebSettings cgo

我正在使用go-webkit并且我有一个webkitsettings实例,我该如何更改设置?我正在尝试做这样的事情ma​​in.gowebview:=webkit.NewWebView()settings:=webview.GetSettings()settings.SetEnableJavascript(false)webview.SetSettings(settings)go-webkit来自https://github.com/mattn/go-webkit/blob/master/webkit/webkit.go#L370的片段typeWebSettingsstruct{gli

c - 我如何提供对我用 cgo 包装的库的访问?

我正在尝试为C库编写绑定(bind),特别是libnfc.我当前的代码可在Github上找到.libnfc的核心结构之一是设备。它由Go类型Device表示。typeDevicestruct{d*C.nfc_device}在Device上运行的libnfc中的所有函数都是它的方法。现在,还有其他C库(例如libfreefare),其API在nfc_devicees上运行。为了模块化,我想将我包装的每个库的代码放入其自己的模块中。这导致了问题,我无法从其他模块中访问私有(private)结构成员。我想到了以下解决方案:使d成为Device的公共(public)成员这将使从其他模块中访问底

go - cgo(golang): error: underfined reference to 'hello'

我只是写了一个非常简单的demo来测试用cgo(golang)加载共享库,代码如下:xxx.h#pragmaoncevoidmyprint(constchar*str);xxx.c#include"xxx.h"#includevoidmyprint(constchar*str){printf("%s\n",str);}构建共享库:gcc-fPIC-sharedxxx.c-olibxxx.so好的,从这里开始一切正常。现在,使用cgo加载libxxx.so,并使用myprint函数:packagemain/*#include#cgolinuxCFLAGS:-I../../include#

windows - Windows 上的 golang cgo 退出状态 2

尝试我想在安装了Go1.8.1的Windows8.1机器上编译以下代码段。packagemain/*inttheAnswer(){return42;}*/import"C"import"fmt"funcmain(){fmt.Println(C.theAnswer())}这是一个有效的IdeoneSnippet.问题虽然在ideone中运行代码片段按预期工作,但在我自己的机器上编译却以某种方式失败:$CC=gccGOARCH=amd64GOOS=windowsgobuild-xWORK=C:\Users\****\AppData\Local\Temp\go-build775642990m

go - 我可以在 cgo 中使用 libtool 输出吗?

我调用的是从C++源代码编译的静态库。但是写依赖库很累,我发现libtool做得很好,例如,我的libfoo.la会有这样的东西:dependency_libs=‘/Users/roger/example/lib/bar/libbar.la-lm’现在我在golang中调用libfoo.a,但是依赖关系可能很复杂。libfoo.a依赖于libbar.a,libbar.a依赖于libhaha.a。我可以在构建golang时使用libfoo.la吗?(或者以某种方式将libfoo.a及其所有依赖项放入一个lib文件中?) 最佳答案 ca

opengl - 处理期望内存大小(以字节为单位)的 CGo 函数的规范方法是什么?

我正在玩弄OpenGL和Go。它大多非常直观,但存在一些尴尬的界面问题。glBufferData的第二个参数应该是内存中缓冲区的大小。C.glBufferData(C.GLenum(target),C.GLsizeiptr(size),ptr(data),C.GLenum(usage))在缓冲区包含32位float的情况下,每个元素将占用4个字节,因此对于第二个参数,我可以执行如下操作:sizeofFloat:=4size:=sizeofFloat*len(buffer)C.glBufferData(C.GLenum(target),C.GLsizeiptr(size),ptr(dat