登录
首页 >  Golang >  Go问答

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

来源:stackoverflow

时间:2024-04-12 14:27:36 238浏览 收藏

本篇文章向大家介绍《如何从 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 
#include 
#include 

extern void gologger(void);

void clogger(void);

cpoc.c

#include "cpoc.h"

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

解决方案


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

根据@kostix评论回答,它是正确的。

以上就是本文的全部内容了,是否有顺利帮助你解决问题?若是能给你带来学习上的帮助,请大家多多支持golang学习网!更多关于Golang的相关知识,也可关注golang学习网公众号。

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>