c - 如何从嵌入在 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 评论回答,这是正确的。
推荐阅读
- git - 忽略 git checkout 中的脚本
- flutter - 如何将焦点设置到 ListView 中的 TextField
- r - 遍历 2 个不同长度的大数据帧(如果,否则)
- python - 使用python附加多个db3文件
- angular - 订阅不可分配给类型路由
- reactjs - React 函数组件 prop 默认使用 TypeScript
- php - 在php中同时获取select下拉列表的值和id
- ios - 无法实例化视图控制器。- 斯威夫特
- sql - 动态连接透视表
- java - Why does Java truncate the preceding is in JSON responses?