首頁 > 後端開發 > Golang > 如何將 Go 程式碼整合到我現有的 C 專案中?

如何將 Go 程式碼整合到我現有的 C 專案中?

DDD
發布: 2024-12-17 18:48:13
原創
475 人瀏覽過

How Can I Integrate Go Code into My Existing C Project?

將Go 程式碼整合到現有的C 專案中

問題:
是否可以呼叫Go代碼來自 C程序,如果是這樣,這怎麼可能

答案:
是的,Go 1.5 引入了-buildmode=c-archive 模式,該模式允許將Go 程式碼編譯成適合連結到C 程式的存檔。要將Go 程式碼整合到現有的C 專案中:

  1. 標記要匯出的函數:

    • 要從C 呼叫的函數必須在Go 程式碼中以//export 註解進行標記。
    • 確保包含這些函數的 Go 套件已命名main。
    • 包含一個名為 main 的函數,即使它是空的。
    • 導入 C 包。
  2. 編譯去存檔:

    • 使用以下指令將 Go 程式碼編譯為 C>

      go build -buildmode=c-archive foo.go
      登入後複製
      使用下列指令將 Go 程式碼編譯為可呼叫靜態函式庫:
    這將產生一個檔案和一個頭檔(例如foo.a 和foo.h).
  3. 連結 C程式:
    • #include "foo.h"
      登入後複製
      在C 程式中,包含產生的頭檔:
    • gcc -pthread foo.c foo.a -o foo
      登入後複製
      登入後複製
      連結使用-pthread 選項針對Go檔案:
    這將允許 C程式呼叫導出的 Go 函數。

範例:

package main

import "C"
import "fmt"

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

func main() {}
登入後複製
考慮下列Go 程式碼(foo.go):

go build -buildmode=c-archive foo.go

然後,在C 程式(foo.c) 中:
#include "foo.h"

int main(int argc, char **argv) {
    PrintInt(42);
    return 0;
}
登入後複製

編譯它:
gcc -pthread foo.c foo.a -o foo
登入後複製
登入後複製

運行 foo 將列印「42」。

以上是如何將 Go 程式碼整合到我現有的 C 專案中?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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