將Go 函數整合到C 程式中
將Go 函數整合到C 程式中
將Go 函數整合到C 程式中
將Go 函式整合到C 程式中涉及將Go 檔案建置為目標檔案(.o) 並將其合併到現有C 專案的存檔(.a) 檔案中。這允許從 C 程式中呼叫 Go 函數。
範例程式碼中遇到的問題
使用者提供的範例顯示了連結階段的錯誤。這些錯誤源自於一種誤解,即與 C 程式不同,GCCGO 期望 Go 檔案中有一個 main 函數。
<code class="go">package main import "C" import "fmt" //export PrintString func PrintString(cs *C.char) { s := C.GoString(cs) fmt.Println(s) } func main() {}</code>
Go 1.5 及更高版本的解決方案
在 Go 1.5 和後來的版本,這個問題已經解決。它允許使用 Go 工具建立 C 相容庫。透過此功能,使用者可以保留問題中給出的C 檔案(main.c),並更新Go 檔案(main.go),如下所示:go build -buildmode c-archive -o mygopkg.a
建立Go物件檔案
要將Go 文件建構成物件文件,請執行以下指令:gcc -o main _main.c mygopkg.a -lpthread
整合到C 專案
要將Go 目標檔案與C 程式(_main.c) 鏈接,請使用以下命令建立最終的二進位檔案:go build -buildmode c-shared -o mygopkg.so
共用程式庫的替代方法
LD_RUN_PATH=$(pwd) gcc -o main _main.c mygopkg.so -lpthread
如果您喜歡使用Go 建立共享庫,以下命令將創建mygopkg.so:
要將共享庫與_main.c 鏈接,請運行以下命令:注意:設定LD_RUN_PATH 以確保連結器在執行時找到目前目錄中的共用程式庫。 有關更多詳細資訊和見解,請參閱 Go 執行模式設計文件.以上是如何將 Go 函數整合到現有 C 專案中:包含連結錯誤解決方案的逐步指南?的詳細內容。更多資訊請關注PHP中文網其他相關文章!