cgo相关内容

在cgo库中链接第三方静态库

我有一个Go库,它为C ++ OpenImageIO 库提供绑定( 这是我最近一次构建尝试的简短示例,试图将其链接到boost,OpenColorIO和OpenImageIO的静态构建: $ export CGO_CPPFLAGS ="\-I/路径/到/提升/包含\-I/路径/到/OpenColorIO/包含\-I/路径/到/OpenImageIO/包含"$ export CGO_LDFLA ..
发布时间:2021-05-11 19:43:14 C/C++开发

如何在go中将[] [] byte转换为** char

我想从go [] []字节转换为C ** char.换句话说,我有一个字节矩阵,我想将其转换为C语言中的char双指针. 请假定我必须有一个[] []字节作为输入,而有一个** char作为输出. 我知道可以通过执行以下操作将[] byte转换为* char: ((* C.char)(unsafe.Pointer(& data [0]))) 但是似乎无法将这种情况扩展到第二维.我 ..
发布时间:2021-05-11 19:42:05 其他开发

在C中使用Go slice

我正在尝试使用返回切片的函数来构建go共享库. 如何使用C代码中的切片? 程序包主要导入"C"类型T struct {C.intB * C字符}//出口测试func Test()[] T {arr:= make([] T,0)arr = append(arr,T {C.int(1),C.CString("a")})arr = append(arr,T {C.int(2),C.CString(" ..
发布时间:2021-05-11 19:38:44 其他开发

cgo:Go内存中的Go指针

执行代码: unsafe.Pointer(& du) 其中 du 是某些 interface 满足以下列表中的规则1? https://github.com/golang/go/issues/12416 Go代码可以将Go指针传递给C,前提是Go存储器要它指向的指针不包含任何Go指针.该规则必须是在C执行期间保留,因为程序不得存储任何内容将指针移到该内存中. 换句话说,是 ..
发布时间:2021-05-11 19:38:35 其他开发

包含文件中的CGO未定义参考

在Go中结束OpenJtalk,成功地包含了文件,并且引用类型没有问题,但是函数触发了 undefined reference 错误. jtalk.go: 程序包主要//#cgo CFLAGS:-I/home/vagrant/open_jtalk/njd [... etc]/*#include#include#include# ..
发布时间:2021-05-11 19:38:09 其他开发

Go/CGo-如何使用作为指针传递的C数组

我将其发布为问题/答案,因为这花了我一段时间才能解决,并且我不介意对我的解决方案提出任何反馈.在Go/CGo中,如何处理作为指针传递的C数组? 例如,使用此C结构: struct _GNetSnmpVarBind {guint32 * oid;/*变量名*/gsize oid_len;/*名称的长度*/...和其他领域}; 我想将oid字段转换为Go字符串,如何使用guint32 * ..
发布时间:2021-05-11 19:36:47 其他开发

Cgo:抱歉,未实现:未在64位模式下编译

我目前正在尝试向Go项目添加一些C代码.没什么花哨的 /*#include无效test(){printf("hooola")}*/进口 (“C")func MessageBox(){C.test()} 但是这将返回 cc1.exe:对不起,未实现:64位模式未在其中编译 我检查了我的 g ++ 和 gcc 编译器,一切似乎都很好, g ++ -v 返回了此 ..
发布时间:2021-05-11 19:35:47 其他开发

从[]个字节到char *

我想包装一个C函数,该函数采用 char * 指向字节的非空缓冲区(的第一个元素).我正在尝试使用CGo将其包装在Go函数中,以便可以将其传递给 [] byte ,但我不知道如何进行转换.C函数签名的简化版本是 void foo(char const * buf,size_t n); 我尝试使用 将指针传递到切片中的第一个 byte C.foo(& b [0],C.size_t(n) ..
发布时间:2021-05-11 19:32:22 其他开发

使用cgo将函数指针传递给C代码

从Go v1.6开始,cgo更改了将指针传递给C代码的规则 golang/go#12416 .从Wiki的C代码调用动态Go回调的示例不再起作用. 程序包主要进口 ("fmt"“不安全")/*extern void go_callback_int(void * foo,int p1);//通常,您必须定义函数或变量//在另一个单独的C文件中,以避免多重定义//错误,但是,使用“静态内联"是一个不 ..
发布时间:2021-05-11 19:31:21 其他开发

将Go [] byte转换为C * char

我有一个byte.Buffer,我使用binary.Write()函数打包了数据.然后,我需要将此字节数组发送到C函数.使用Go 1.6时,我并没有成功解决这个问题. buf:= new(bytes.Buffer)//创建我的缓冲区....binary.Write(buf,binary.LittleEndian,data)//将我的数据写入此处缓存addr:=(* C.uchar)(unsaf ..
发布时间:2021-05-11 19:29:51 其他开发

在Windows 64位上编译gopacket

我试图在Windows 10上使用 gopacket . 我正在使用它来嗅探数据包并将其直接注入NIC或从NIC注入数据. 我可以轻松地使用GOARCH = 386编译和运行我的代码,但不能在GOARCH = amd64中运行. 值得一提的是:我不打算交叉编译. 我正在使用go1.6.windows-386来编译32位版本,当我尝试使用GOARCH = amd64进行编译时,我使用了g ..
发布时间:2021-05-11 19:21:39 其他开发

如何使用指向C数据的指针写入Golang中的文件?

我正在使用FFmpeg为Windows平台编写一个应用程序,它是golang包装器goav,但是我在理解如何使用C指针获取对数组的访问方面遇到了麻烦. 我正在尝试将来自C的uint8指针所指向的帧数据写入golang中的.ppm文件. 完成此操作后,为了证明FFmpeg可以达到预期效果,我想将帧设置为OpenGl中的纹理,以使视频播放器具有出色的过渡效果;任何出色而有效地做到这一点的指 ..
发布时间:2021-05-06 20:47:08 其他开发

golang:使用sqlite3.c的CGO/clang

我想编译以使用osx.使用以下命令:GOOS = linux GOARCH = arm CGO_ENABLED = 1 go build -o foo main.go 但是我得到:运行时/CGO铛:错误:编译期间未使用的参数:'-mno-thumb' 我使用此软件包: https://github.com/mattn/go-sqlite3 我尝试了提示: https://github. ..
发布时间:2021-04-22 18:43:16 数据库

如何将Go字符串数组转换为C字符串数组?

我在项目中使用 cgo ,并且想要导出一个函数以供使用.这是我要实现的示例: 包csplit进口 (“C"“弦乐")//导出拆分/* Split函数采用两个C字符串,其中第二个表示一个要拆分的子字符串,并返回一个字符串数组.例子:Split("1,2",“,")//给出["1","2"]*/func Split(原始* C.char,split * C.char)[] * C.char {goR ..
发布时间:2021-04-09 20:12:47 其他开发

导出函数返回双精度数组

在Golang中如何导出返回双精度数组的函数.以前可能的方式似乎现在返回“运行时错误:cgo结果具有Go指针": //export Init func Init(filename string) (C.int, unsafe.Pointer) { var doubles [10]float64 doubles[3] = 1.5 return 10, unsafe.Po ..
发布时间:2020-11-16 07:52:23 其他开发

将cgo数组转换为切片

目前,我这样做是为了将CGO的double数组转换为float64切片: doubleSlc := [6]C.double{} // Fill doubleSlc floatSlc := []float64{float64(doubleSlc[0]), float64(doubleSlc[1]), float64(doubleSlc[2]), ..
发布时间:2020-11-16 06:43:42 其他开发

cgo:如何从c传递结构数组

C部分: struct Person {...} struct Person * get_team(int * n) 转到部分: n := C.int(0) var team *C.struct_Person = C.get_team(&n) defer C.free(unsafe.Pointer(team)) 我可以通过这种方式获取数组的第一个元素.但是如何获得带有n个元素的 ..
发布时间:2020-11-16 06:25:47 其他开发

垃圾收集和CGO

是否可以在Go句柄中创建垃圾收集器并释放通过C代码分配的内存?抱歉,我之前没有使用过C和cgo,所以我的示例可能需要澄清. 让我们说您有一些想使用的C库,并且该库分配了一些需要手动释放的内存.我想做的是这样的: package stuff /* #include */ import "C" type Stuff C.Stuff func NewStuff() ..
发布时间:2020-11-12 19:54:48 其他开发

CGO:如何在Golang中使用指针从C中的数组访问数据

我正在使用FFmpeg为Windows平台编写一个应用程序,它是golang包装器goav,但是我在理解如何使用C指针获取对它们所指向的数据数组的访问方面遇到困难. 我正在尝试获取存储在AVFrame类中的数据,并使用Go将其写入文件,最后使用OpenGl中的纹理使视频播放器具有很酷的过渡效果. 我认为了解如何转换和访问C数据将使编码变得更加容易. 我已经剥离了C代码的所有相关部 ..
发布时间:2020-11-04 02:43:27 其他开发

为什么用CGO_ENABLED = 0编译会更慢?

在编写利用网络的程序时,可以看到 CGO_ENABLED = 0 的编译速度明显下降。 例如,最简单的HTTP服务器: package main import( “标志“ ” fmt“ ” log“ ” net / http“ ) func handler(w http.ResponseWriter,r * http。请求){ fmt.Fprintf(w,“嗨 ..
发布时间:2020-10-06 20:43:30 其他开发