首頁 > 後端開發 > Golang > 主體

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

WBOY
發布: 2024-02-06 10:24:03
轉載
958 人瀏覽過

如何使用包含 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
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!