我正在使用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/