[英]How do I call a Go function from C code embedded in 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("cLogger\n");
goLogger();
}
// 和 export 之間的空格導致函數不能被導出。
基於@kostix 評論的答案是正確的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.