首頁  >  文章  >  後端開發  >  如何將 Go 函數整合到現有 C 專案中:包含連結錯誤解決方案的逐步指南?

如何將 Go 函數整合到現有 C 專案中:包含連結錯誤解決方案的逐步指南?

Susan Sarandon
Susan Sarandon原創
2024-10-27 12:10:021031瀏覽

How to Integrate Go Functions into Existing C Projects: A Step-by-Step Guide with Solutions for Linking Errors?

如何在現有C 專案中使用Go

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

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn