目前有哪些方法可以让你在C中调用Go函数?

时间:2014-04-19 11:09:03

标签: c compilation go cgo

我已经看到了很多不同的方法可以做到,在必须使用大量的包装和回调方面,它们似乎都不是理想的。有一种简单的方法吗?

例如,我们有:

//foo.go

package foo

import "C"

//export SayFive
func SayFive() int {
    return 5
}

现在已经将其删除到最低限度,此时我想要做的就是在C中调用SayFive函数。

但是,不在此文件的顶部。能够做到这一点非常简单和有用,但我正在寻找这样的方式:

//foo.c

#include <stdio.h>

int main() {
    int a = SayFive();
}

我在上面的示例中看到过,#include "_cgo_export.h"完全有道理,但当我完成并试图编译它时,它就会失败。

有人可以解释所涉及的整个过程,这样我们可以这样做吗?

1 个答案:

答案 0 :(得分:4)

你可以从C中的Go和Go中调用C,但在Go程序的框架内只能

因此,使用main()的C程序示例将无效,因为这将在C程序的框架内调用Go。

换句话说,Go无法创建可以与C程序静态或动态链接的对象。

因此,你必须将你想要做的事情转变为头,并将Go程序作为主程序,并从中调用C程序部分。这意味着具有main()功能的程序必须是Go程序。

希望有意义!