1

Lirc の Go バインディングを作成しようとしています: 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 はおそらくポインターである必要がありますが、常に同じエラーが発生します。

次に、ラッパーを試してみましたが、これにより不明なタイプ名「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 バージョン: go バージョン go1.4 linux/amd64 (Windows では Vagrant)

4

1 に答える 1