3

我见过很多不同的方法可以做到这一点,就必须使用大量包装器和回调而言,它们似乎都不理想。有没有一种简单的方法可以做到这一点?

例如,我们有这个:

//foo.go

package foo

import "C"

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

现在这已被精简到最低限度,此时我想做的就是SayFive在 C 中调用该函数。

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

//foo.c

#include <stdio.h>

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

我在上面的例子中看到过,#include "_cgo_export.h"这是完全有道理的,但是当我这样做并尝试编译它时,它失败了。

任何人都可以解释允许我们这样做的整个过程吗?

4

1 回答 1

4

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

因此,您的带有 a 的 C 程序示例main()将不起作用,因为那将在 C 程序的框架内调用 Go。

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

所以你必须改变你想做的事情,让 Go 程序成为主控程序,并从中调用 C 程序部分。这意味着具有该main()功能的程序必须是 Go 程序。

希望这是有道理的!

于 2014-04-19T11:55:54.557 回答