在Go 1.5 中,引進了-buildmode=c-archive 功能來將Go 程式碼橋接到非Go 程式碼環境。透過此功能,您可以將 Go 程式碼整合到現有的 C 專案中,使您能夠將更高層級的任務委託給更詳細的 Go。
使 Go對於 C 程式碼可用的函數,您必須使用特殊的 //export 註解明確匯出它們。
package main import ( "C" "fmt" ) //export PrintInt func PrintInt(x int) { fmt.Println(x) } func main() {}
將 Go 程式碼編譯為 C 可呼叫函式庫需要使用 -buildmode=c-archive 標誌。
go build -buildmode=c-archive foo.go
此指令產生一個靜態函式庫 (foo.a) 和一個包含匯出函數宣告的頭檔 (foo.h)。
在您的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中文網其他相關文章!