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 プログラムのフレームワーク内でのみ可能です。

したがって、C プログラムmain()のフレームワーク内から Go を呼び出すため、a を使用した C プログラムの例は機能しません。

つまり、Go は、C プログラムと静的または動的にリンクできるオブジェクトを作成できません。

ですから、やりたいことを逆手に取って、Go プログラムをマスターにして、そこから C プログラムの部分を呼び出す必要があります。つまり、main()関数を含むプログラムは Go プログラムでなければなりません。

それが理にかなっていることを願っています!

于 2014-04-19T11:55:54.557 に答える