c - 通过CGO传递结构

标签 c go cgo

我正在使用cgo从go调用c。我想通过该函数传递一个结构。
在我的c文件中,它看起来像这样:

#include <stdio.h>

void test(TestStruct val) {
  printf(val);
}

在我的文件中,我正在这样做:
package main

// #cgo CXXFLAGS: -I/usr/lib/
// #cgo LDFLAGS: -L/usr/lib/ -lstdc++
//#include <file.c>
import "C"

type TestStruct struct {
  val  string
  type string
}

func main() {
  var value = TestStruct{ "foo", "bar" }

  C.test(value);
}

但这不起作用。它引发此错误:

无法确定C.test的名称种类

最佳答案

在C代码中未定义TestStruct。尝试添加定义。

您还需要在结构中使用cgo的C字符串而不是Go的内置字符串。

顺便说一句:您的C代码中还有两个错误。 printf(val)不起作用,因为printf不能用于直接打印结构。另外,出于安全原因,您应该绝对不要使用printf的第一个参数使用字符串文字以外的任何内容。将该行替换为puts(val.val)printf("%s", val.val)

关于c - 通过CGO传递结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60310450/

相关文章:

c - 如何在 Code::blocks 中将 Arduino 草图转换为 C 文件?

java - 在 Eclipse 中哪里可以找到构建文件?

reflection - 在 Golang 中将值类型转换为 Map?

c - 如何在 CGO 中使用外部 .c 文件?

C链表不能在开头添加元素

c - 段错误(核心转储)错误

go - 构建一个多可执行的 Go 项目

Go Lang-将结构附加到 slice

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

garbage-collection - 垃圾收集和cgo