ホームページ >バックエンド開発 >Golang >Go 1.5 の `-buildmode=c-archive` を使用して C プログラムから Go 関数を呼び出すにはどうすればよいですか?

Go 1.5 の `-buildmode=c-archive` を使用して C プログラムから Go 関数を呼び出すにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-12-19 19:53:13669ブラウズ

How Can I Call Go Functions from a C Program Using Go 1.5's `-buildmode=c-archive`?

Go 1.5 で C プログラムから Go コードを呼び出す

Go 1.5 では、Go コードを非 Go にブリッジするために -buildmode=c-archive 機能が導入されました。環境。この機能を使用すると、Go コードを既存の C プロジェクトに統合し、より冗長な Go に高レベルのタスクを委任できるようになります。

C 呼び出し用の Go 関数のエクスポート

Go を作成するにはC コードで使用できる関数を使用するには、特別な //export コメントを使用して関数を明示的にエクスポートする必要があります。

package main

import (
    "C"
    "fmt"
)

//export PrintInt
func PrintInt(x int) {
    fmt.Println(x)
}

func main() {}

C のコンパイラ設定使用法

Go コードを C 呼び出し可能なライブラリとしてコンパイルするには、-buildmode=c-archive フラグを使用する必要があります。

go build -buildmode=c-archive foo.go

このコマンドは、静的ライブラリ (foo.a) とエクスポートされた関数宣言を含むヘッダー ファイル (foo.h)。

C への統合プロジェクト

C プロジェクト内に、生成されたヘッダー ファイルをインクルードし、次のように提供された関数を使用します。

#include "foo.h"

int main(int argc, char **argv) {
    PrintInt(42);
    return 0;
}

コンパイルと実行

C プログラムをコンパイルするには、次を使用します。適切なスレッドをサポートするための -pthread フラグ。

gcc -pthread foo.c foo.a -o foo

実行可能ファイルを実行すると、意図した内容が出力されます。整数 (42) をコンソールに送信します。

以上がGo 1.5 の `-buildmode=c-archive` を使用して C プログラムから Go 関数を呼び出すにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。