问题标签 [cgo]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
go - 将现有的 C 代码集成到 Go。将无符号字符指针结果转换为 []byte
这是一个简单的例子:
结果我得到了这样的东西
指针data
,第一个字符data
和大小。但是我怎样才能得到实际data
值,最好是作为 []byte 类型在 go 代码中使用它?
换句话说 - 如何转换unsigned char *
为[]byte
?
go - GoLang / CGO:从 Go 调用 Mach API host_statistics() 时出现问题
我使用以下 C 代码片段来获取 OS X 上的 CPU 负载:
在阅读了 cgo 教程后,我尝试将这段代码移植到 Go。生成的代码如下所示:
但是,当我尝试构建代码时,我最终得到以下错误消息
我不明白为什么 cgo 抱怨这种类型。host_statistics() 的签名在 mach 标头中定义为:
c - C 常量上的 Cgo 链接器错误
我正在使用 cgo 包装一个 C 库并遇到了一组奇怪的链接器错误。我将问题归结为以下几点:
文件 header.h 包含
并且 test.go 包含
运行时go run test.go
出现以下错误:
我对此有两个问题:
- 为什么链接器与预定义的常量有任何关系?
- 为什么
CONSTANT1
,CONSTANT3
,CONSTANT4
显示为未定义,但不是CONSTANT2
?
提前致谢。
*编辑:定义为其他值(例如整数)的常量可以正常工作。
*Edit2:使用 go 版本 go1.1.2 linux/amd64
*Edit3:失败的完整示例:
我正在使用 C OpenLDAP 库并希望使用该LDAP_SASL_SIMPLE
常量。它被定义ldap.h
为
LDAP_SASL_NULL
常数给出了相同的错误。
一个最小的演示 go 程序:
go - go build 在编译 cgo 包时找不到我的 C 标准库
我正在尝试在树莓派中编译一个 go 项目。
该项目有 5 个文件,两个小.c
文件及其对应文件(其中一个文件是我的代码 - 它调用.h
另一个,它是一个 base64 库)和一个使用..go
.c
cgo
当我只在树莓派上编译我的 C 代码(及其调用和所有内容)时gcc
,它在没有任何配置的情况下运行良好。
x86
当我在我的Linux Ubuntu 机器上编译整个 go 项目时go build
,它也做得很好。
但是当我尝试go build
在树莓派中编译 go 项目时,它没有得到我的 C 库:
(如果我把它放在问题发生<stdlib.h>
之前<math.h>
,那么问题不在于没有 math.h,我认为)我试图:
- 添加
// #cgo CFLAGS: -I/usr/include
到.go
文件中 - 添加
// #cgo LDFLAGS: -I/usr/include
(我无法发现这些标志的正确用法是什么) - 采用
go build -ldflags '-I/usr/include'
我不明白为什么 go 试图用-I /usr/lib/go/pkg/linux_arm
. 真的不要。有人帮忙。
编辑:关于项目结构的澄清说明:
它有 5 个文件,2 个 C(及其对应的 H):
base64.c
项目.c
和 1 去:
我应该在哪里,什么以及如何改变这个声明才能让这个东西起作用?为什么它可以在我的 x86 linux 上运行?
go - 是否可以将 go 包制作为 .so 或 .a 文件?
最近我花了一些时间在 cgo 以及如何在 go 中编写 C 代码。使用#cgo 指令加载.so 文件似乎很容易。但是,有什么方法可以以相反的方式做到这一点?也就是说,我们可以将 go 包构建到 .so 或 .a 文件中,以便 c/c++ 项目可以直接使用它吗?
go - 将结构和结构数组从 Go 传递给 C 函数
卡住了这个问题。只能获得传递结构的第一个成员......我做错了什么?将结构从 Go 传递到 C 的正确方法是什么?
这是我如何不起作用的示例:
c - mmap 缓冲区到文件句柄
我需要“伪造”一个文件描述符(支持fstat
),我就是这样做的。
您会看到写入文件句柄的位置被注释掉了。
如果我不将缓冲区写入分配的区域,则它是空的。我希望mmap
结合MAP_FIXED
使用提供的缓冲区的地址,从而将内容映射到该区域。
我猜write
调用副本,从而使内存使用量加倍。我真的必须write
吗?
go - 在 Go 中使用可变参数 C 函数
我用shm_open
cgo。shm_open
在 Linux 上用 3 个参数定义
而在 OSX (Darwin) 上,第 3 模式标志是可选的。
当尝试在 OSX 上传递模式时,这会导致 CGO 出现问题。它抱怨我传递了 3 个参数,而预期只有 2 个。
我该如何解决这个问题?
garbage-collection - 有没有一种安全的方法可以使用 CGo 从 C 代码中保持对 Go 变量的引用?
当使用 CGo 将 C 代码与 Go 接口时,如果我在 C 端保留对 Go 变量的引用,我是否会冒该对象被垃圾收集器释放的风险,或者 GC 会看到由管理的变量中的指针C面?
为了说明我在问什么,请考虑以下示例程序:
去代码:
C代码:
我是否冒着在and调用foo->ch
之间被垃圾收集器释放的风险?如果是这样,有没有办法从 C 端固定 Go 变量,以防止它在我持有对它的引用时被释放?foo_new
foo_send
go - golang: cgo extern is not working
I am trying to run cgo for golang with following example (given at go-wiki -> Global Functions):
foo.go
file:
foo.c
file:
While running this example, I am getting following error:
I am not able to trace this down. Why ACFunction
is undefined
? or Am I missing something?
go version
:
go version go1.1.2 linux/386