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

标签 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);
脚本
#include "cpoc.h"

void cLogger(void)
{
    printf("cLogger\n");
    goLogger();
}

最佳答案

//和export之间的空格导致该函数无法导出。
基于@kostix评论的答案是正确的。

关于c - 如何从cgo中嵌入的C代码调用Go函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64731086/

相关文章:

go - 模板中的结构数组

cgo 与使用线程本地存储的 C 库交互

go - 调用需要 sockaddr 的 C 函数

c - 为什么用XDrawPoint(X Window)无法绘制点 "smoothly"?

c - Unix环境运行C程序

计数排序算法在 C 中不起作用

c - Switch 语句的工作原理

go - 在中间件中重写内容长度

list - 何时选择容器/列表而不是 slice

go - 如何在 Go 端构建 C 结构?