cgo相关内容

如何使用 cgo 在 go 中静态链接 c 库?

因此,该组中有很多内容表明您可以在 go 中执行此操作(尽管 cgo 文档中没有): 包桥导入“fmt"//#cgo CFLAGS: -I/Users/doug/projects/c/go-bridge/include//#cgo LDFLAGS:/Users/doug/projects/c/go-bridge/build/libgb.a//#include 导入“C"功能运行(){fmt.Pr ..
发布时间:2021-12-11 22:39:31 其他开发

(*[1 << 30]C.YourType) 在 CGo 中究竟做了什么?

在 Golang wiki 中的“Turning C arrays into Go slices"下,有是一段代码,用于演示如何创建由 C 数组支持的 Go 切片. 导入“C"导入“不安全"...var theCArray *C.YourType = C.getTheArray()长度 := C.getTheArrayLength()切片 := (*[1 ..
发布时间:2021-12-11 22:33:28 其他开发

Cgo找不到< iostream>之类的标准库.

我正在尝试在Go代码中包含C ++代码,但无法识别. 我首先想到它将其视为C代码并尝试(并失败)这样的编译方式,但实际上删除包含行可为我提供c ++错误疑难解答,例如错误:"cout"不是"std"的成员该代码可以使用g ++正确编译. 我尝试添加-lstdc ++ LDLFLAG,并在CXXFLAG中添加到lib的路径,但这并没有改变. 我做了其他一些测试(都失败了),但这是最 ..
发布时间:2021-05-11 20:02:17 C/C++开发

使用cgo时的多重定义

程序包主要/*int add(int a,int b){返回a + b;}*/导入"C"导入"fmt"func main(){}func Test1(){fmt.Println(C.add(1,3))}//导出Test2func Test2(){} 编译程序: dingrui @ dingrui-PC:〜/Projects/gotest/array $ go build -o libtes ..
发布时间:2021-05-11 20:01:51 其他开发

C字符名称[8]到GoLang名称[8]字节

我有一个C函数可以填充C结构: typedef struct {字符名称[8];} 我需要将数据复制到具有相同内容的Go lang结构中: type sData结构{名称[8] byte} 该结构具有多个尺寸的参数:4、12、32,因此最好具有一个功能不只一个尺寸的函数. 谢谢 解决方案 要使其通用一些,可以将C char数组分解为 * C.char ,然后使用 un ..
发布时间:2021-05-11 20:00:32 其他开发

无法调用unsafe.Pointer(指向C函数)作为函数

我正在尝试使用具有2个int参数的相同签名来调用C函数.并且此错误无法调用非功能f(类型unsafe.Pointer). 程序包主要/*int add(int a,int b){返回a + b;}int sub(int a,int b){返回a-b;}*/导入"C"进口 ("fmt"“不安全")func main(){一个:= C.int(1)b:= C.int(2)fx:= make([] u ..
发布时间:2021-05-11 20:00:18 其他开发

golang cgo无法通过构建模式c共享导出变量

我正在尝试在cgo中开发sudo的插件. https://www.sudo.ws/man/1.8.15/sudo_plugin.man.html 将结构导出到policy_plugin的全局范围. 策略插件必须在全局范围内声明并填充 policy_plugin 结构. 您对此有何解释? export_test.go 程序包主要/*#include"sudo_plug ..
发布时间:2021-05-11 20:00:04 其他开发

如何在cgo导出的函数中获取正确的参数名称?

我正在Go中编写一个库,我想将其导出到C共享库.它工作正常,但是我发现导出的标头使用 p0 , p1 , p2 ,有点烦人...代替参数名称,而不是Go中的原始参数名称.有没有办法改变这种行为,还是我只是坚持下去? 我正在使用 go版本go1.12.7 darwin/amd64 示例: 程序包主要/*#import*/导入"C"进口 ("fmt")func ma ..
发布时间:2021-05-11 19:59:43 其他开发

使用以C类型作为参数的导出函数类型时遇到问题

编辑:感谢@Not_a_Golfer,更改了标题以更好地反映问题 我一直在尝试Go,无法解决这个问题. 当包含在主程序包中时,以下命令可以正常工作: //定义一个回调函数类型,并为其定义一个调用程序输入Callback func(i C.int,d C.double)func调用(cb回调,i C.int,d C.double){cb(i,d)}//...然后定义我的回调并将其传递给 ..
发布时间:2021-05-11 19:53:27 其他开发

有没有一种方法可以在单个二进制文件中包含多个c-archive软件包

我试图在单个C二进制文件中包含多个Go c-archive软件包,但是由于每个c-archive中都包含完整的运行时,所以我遇到了多个定义错误. 我尝试将多个软件包放在同一个c归档中,但是go build不允许这样做. 我还尝试从所有档案中删除 go.o ,但似乎我自己的Go代码也位于该目标文件中,因此不起作用,甚至我得到多个定义的原因,而不是链接程序从后续存档中忽略了 go.o . ..
发布时间:2021-05-11 19:52:17 服务器开发

如何使用伪CGO指令在Go构建的子目录中添加C文件?

对于每个文档,使用cgo进行 go build 会将所有C/C ++文件添加到包的根目录中,作为编译的一部分.有没有一种方法可以使用CGO指令使给定子目录中的C/C ++文件也可以作为编译的一部分,也可以使其成为根目录中的文件? 解决方案 不是.您唯一的选择是使子目录成为另一个Go程序包,但随后您必须将所需的任何功能包装在导出的Go函数中,然后将其导入到项目中. 编译C/C ++文件 ..
发布时间:2021-05-11 19:51:32 其他开发

如何在Go中访问C位域

我有一个像这样的结构: typedef struct st_MASK_SETTINGS{uint32_t foo:1;uint32_t bar:7;} MASK_SETTINGS 现在通过cgo我想访问 foo -但找不到任何文档. 天真的 v:= ms.foo 抱怨没有字段或方法. 解决方案 好吧,你不会喜欢这个答案,但是 没有实现此目的的便携式方法,因为位域打包是“ ..
发布时间:2021-05-11 19:50:49 其他开发

如何在Go中填写void * C指针?

我正在尝试与Go中的某些C代码进行交互.使用cgo,在我遇到这种(相当普遍的)情况之前,这一直是相对简单的:需要将指针传递给本身包含指向某些数据的指针的结构.我似乎无法从Go中弄清楚如何做到这一点,而不必诉诸将结构的创建放入C代码本身中,而我不希望这样做.这是一个说明问题的代码段: 程序包主要//typedef struct {//int size;//void * data;//}信息;/// ..
发布时间:2021-05-11 19:50:02 其他开发

转到由C数组支持的切片

在Golang Wiki的CGO部分中,有一个 游乐场: https://play.golang.org/p/e4jv8jfU_WI 输出: 1073741824 10737418241073741824 1073741824 [0 0 0 0 0 0 0 0]1073741824 1073741825紧急情况:运行时错误:切片范围超出范围goroutine 1 [运行中]:main. ..
发布时间:2021-05-11 19:47:53 其他开发

CGO结果有去指针

我正在编写一些go代码,该代码可以导出如下功能: 程序包主要导入"C"//导出returnStringfunc returnString()字符串{//gostring:=“你好世界"返回gostring}func main(){} 我使用go build -buildmode = c-shared 来构建 .so 和头文件,但是当我调用 returnString()在我的C代码中,我得到 ..
发布时间:2021-05-11 19:46:59 其他开发

cgo不会在导入的包中导出函数

我正在尝试使用 CGO 将现有的Go程序包构建到C共享库和标头中. 我使用记录的 -buildmode c-shared 构建了程序包. -buildmode = c-shared构建列出的主软件包及其导入的所有软件包,进入C共享库.唯一可调用的符号将是使用cgo//export注释导出的那些函数.只需要列出一个主程序包 并使用//export Func 将函数公开为C符号. ..
发布时间:2021-05-11 19:46:40 其他开发

正确的Go类型传递给C函数?

我正在将用C语言编写的一些服务器代码移植到Go上,并且它使用了我真的不想重写的加密库.相反,我尝试使用Cgo编写包装程序,以便我的其余代码可以更轻松地调用它.这是lib标头的一部分: //encryption/encryption.h#定义CRYPT_BBCFG 1typedef struct {//...一堆田野...uint32_t bb_posn;} CRYPT_SETUP;int CRY ..
发布时间:2021-05-11 19:45:40 其他开发