首頁 >後端開發 >Golang >如何使用包含 C 程式碼的套件正確編譯 Golang 項目

如何使用包含 C 程式碼的套件正確編譯 Golang 項目

WBOY
WBOY轉載
2024-02-06 10:24:03998瀏覽

如何使用包含 C 代码的包正确编译 Golang 项目

問題內容

我開始用 Golang 寫一個項目,但立即遇到了問題。我需要從我的程式碼連接到硬件,我有一個驅動程式和一個供應商提供的 Golang 包裝器。包裝器連接的描述說需要將程式碼放在專案的src 目錄中(我不使用這樣的目錄,但我將檔案按包名放在目錄./internal/fptr10 中並在我的main.go 已成功匯入)。我在 IDE GoLand 中看到了這個套件中的方法,但是當我嘗試編譯該專案時(我調用了第一個應該創建驅動程式實例的函數,稱為 New()) - 我收到錯誤:fptr10。 New() 未定義。包裝器目錄中有兩個用C寫的頭文件,我知道它們有問題,但我不明白如何正確編譯它。

整個專案以及庫本身都可以在 https://github.com/Natrix31/KKTWatcher 上找到 P.S.:我在 Windows 下工作

我嘗試從 IDE 編譯項目,並使用 go build 和 go install 從命令列編譯項目 但結果是一樣的。程式無法編譯並給出錯誤:New() undefined


正確答案


對於這種情況,您可以將c 程式碼放入go 模組中,只需確保您的平台中安裝了c 編譯器,並使用序言註釋進行引用。

main.go

#
/*
    #include <stdio.h>
    #include <math.h>
    #include "calc.h"
*/
import "c"

func main() {
    fmt.println(c.add(1, 2))
}

calc.c

#include "calc.h"

int add(int a, int b) {
    return a + b;
}

calc.h

int add(int a, int b);

go 預設啟用 cgo,因此只需建置它即可:

go build -o main.out .

以上是如何使用包含 C 程式碼的套件正確編譯 Golang 項目的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:stackoverflow.com。如有侵權,請聯絡admin@php.cn刪除