在現有C 專案中使用Go
背景:
您有一個由多個物件組成的C 程式檔案儲存在存檔檔案(.a) 中。您打算在專案中新增一個新的 Go 文件,將其編譯為目標文件,並將其合併到現有存檔中。
目標:
將 Go 函數整合到您的 C 語言中程式。
過程:
1.將Go 檔案編譯為目標檔案:
執行以下🎜>運行以下指令:
gccgo -c printString.go -o printString.o -fgo-prefix=print -Wall -Werror -march=native
2.從C:
在c_caller.c 檔案中呼叫Go 函數,宣告一個extern 函數:
extern int PrintString(char*) __asm__ ("print.main.PrintString");
在main 函數,呼叫Go 函數並處理結果:
int result = PrintString(string_to_pass); if (result) { printf("Everything went as expected!\n"); } else { printf("Uh oh, something went wrong!\n"); }
3 .使用GCCGO 建構整個專案:
gccgo -o main c_caller.c printString.o -Wall -Werror -march=native
4.解決錯誤:
Go 1.5 中的替代解決方案:
在Go 1.5(8 月推出)中,一項新功能允許從Go 程式碼建立C 相容庫。借助此功能,您可以直接從 Go 檔案建立靜態或共享庫,從而無需中間物件檔案。範例:
#include <stdio.h> int main() { char *string_to_pass = NULL; if (asprintf(&string_to_pass, "This is a test.") < 0) { printf("asprintf fail"); return -1; } PrintString(string_to_pass); return 0; }
package main import "C" import "fmt" //export PrintString func PrintString(cs *C.char) { s := C.GoString(cs) fmt.Println(s) } func main() {}
以上是如何使用 GCCGO 將 Go 函數整合到現有的 C 專案中?的詳細內容。更多資訊請關注PHP中文網其他相關文章!