如何从cgo中嵌入的C代码中调用Go函数

  • 本文关键字:代码 调用 函数 Go cgo c go cgo
  • 更新时间 :
  • 英文 :


这是非常基本的,很抱歉出现了初级问题。我有Go代码,它调用了一个C函数(通过cgo嵌入到同一个Go包中(,它应该调用另一个Go函数。调用C代码可以工作,代码也可以编译,但在链接时,C链接器找不到Go函数。

cpoc % go build .
# cpoc
Undefined symbols for architecture x86_64:
"_goLogger", referenced from:
_cLogger in _x003.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
poc % 

cpoc.go

package main
// #cgo pkg-config: vips
// #include "cpoc.h"
import "C"
import (
"fmt"
)
// export goLogger
func goLogger() {
fmt.Println("goLogger")
}
func main() {
C.cLogger()
}

cpoc.h

#include <stdlib.h>
#include <stdio.h>
#include <glib.h>
extern void goLogger(void);
void cLogger(void);

cpoc.c

#include "cpoc.h"
void cLogger(void)
{
printf("cLoggern");
goLogger();
}
//和导出之间的空格导致函数无法导出。

根据@kostix的评论回答,并且是正确的

最新更新