簡體   English   中英

如何從嵌入在 cgo 中的 C 代碼調用 Go 函數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM