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

问题描述

这是基本要求的道歉。我有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("cLogger\n");
    Gologger();
}

解决方法

//和export之间的空格导致该函数无法导出。

基于@kostix评论的答案,它是正确的。