首頁 > 後端開發 > Golang > 如何使用 Go 1.5 的 `-buildmode=c-archive` 從 C 程式呼叫 Go 函數?

如何使用 Go 1.5 的 `-buildmode=c-archive` 從 C 程式呼叫 Go 函數?

Linda Hamilton
發布: 2024-12-19 19:53:13
原創
634 人瀏覽過

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 中,引進了-buildmode=c-archive 功能來將Go 程式碼橋接到非Go 程式碼環境。透過此功能,您可以將 Go 程式碼整合到現有的 C 專案中,使您能夠將更高層級的任務委託給更詳細的 Go。

匯出 Go 函數以進行 C 呼叫

使 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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板