gpt4 book ai didi

CGO : use typedef struct in preamble

转载 作者:IT王子 更新时间:2023-10-29 02:30:13 26 4
gpt4 key购买 nike

我正在尝试为 lirc 创建 Go 绑定(bind): https://github.com/inando/go-lirc

像 lirc_init() 和 lirc_deinit() 这样的简单函数可以正常工作。

对于函数“lirc_command_init()”,我需要使用结构类型: https://github.com/inando/lirc/blob/master/lib/lirc_client.h#L334

typedef struct {
char packet[PACKET_SIZE + 1];
char buffer[PACKET_SIZE + 1];
char reply[PACKET_SIZE + 1];
int head;
int reply_to_stdout;
char* next;
} lirc_cmd_ctx;

我首先尝试了这样的事情:

func lircCommandInit(format string, v ...interface{}) (todoctx string, err error) {
var ctx C.struct_lirc_cmd_ctx
cmd := C.CString(fmt.Sprintf(format, v...))
ok, err := C.lirc_command_init(ctx, cmd)
fmt.Println(ok, err)
return
}

但这给了我这个错误:无法确定 C.lirc_command_init 的名称类型。
不确定 struct_ 是否应该用于某个类型?
ctx 可能需要是一个指针,但我总是得到同样的错误。

然后我尝试使用包装器,但这给了我错误 unknown type name 'lirc_cmd_ctx'

// #cgo LDFLAGS: -llirc_client
// #cgo CFLAGS: -I /usr/include/lirc
// #include <lirc_client.h>
//
// int lirc_command_init_custom(const char* msg)
// {
// lirc_cmd_ctx ctx;
// return -2;
// }
import "C"

我在这里做错了什么?我如何在 Go 中使用该结构类型?

更新:
不确定这是否相关,但 C.free 也提示。

p := C.CString(prog)
defer C.free(unsafe.Pointer(p))

-> 无法确定 C.free 的名称类型

去版本:go version go1.4 linux/amd64 (Vagrant on windows)

最佳答案

could not determine kind of name for ... 消息是您在未定义某些内容时得到的消息。对于 C.free,将 stdlib.h 添加到您的包含中。

#include <stdlib.h>

其他错误也是如此,除了这是导入不正确的 header 或该 header 的错误版本的情况。检查一个随机的 ubuntu 系统,lirc_client.h 文件与您链接的文件有很大不同。确保您使用的是定义了类型的正确版本。

关于CGO : use typedef struct in preamble,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27688263/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com