亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

構建簡單 cgo 模塊的問題

構建簡單 cgo 模塊的問題

Go
慕尼黑8549860 2022-10-10 20:04:21
Ubuntu。vscode 1.62.1。去1.17.3。vscode 去擴展 v0.29.0。鉆研 v1.7.1。我正在嘗試使用 vscode 和 vscode-go 構建一個使用 Cgo 的小應用程序。只有一個模塊導入“C”。我的項目結構的根目錄包含“go.mod”和“main.go”文件,并且子文件夾中有子包。我還有包含 C 工件的“include”和“lib”目錄。這是我目前在 C 模塊中的內容:package voltage// #cgo CFLAGS: -g -Wall -Iinclude// #cgo LDFLAGS: -Llib/linux -lvibesimple -lcurl -lssl -lvibecrypto -lvibeictk -lvibeserver// #include <stdio.h>// #include <errno.h>// #include "veapi.h"import "C"func Encrypt(datatype string, data string) (result string) {    return}func Decrypt(datatype string, data string) (result string) {    return}在“問題”視圖中,它顯示了以下兩個問題:go list 未能返回 CompiledGoFiles。這可能表示無法執行 cgo 處理;嘗試在命令行構建。請參閱https://golang.org/issue/38990。和:無法導入 C(cgo 預處理失?。ň幾g)我閱讀了引用的問題,但我不確定如何處理這些信息。我不知道如何在這里前進。
查看完整描述

1 回答

?
隔江千里

TA貢獻1906條經驗 獲得超10個贊

C 編譯器不在源目錄中執行,而是在僅包含中間文件的臨時目錄中執行,例如編譯為靜態庫 (.a) 的 go 文件。因此,LDFLAG-Llib/linux指向一個不存在的目錄。

要解決此問題,只需將該標志替換為-L${SRCDIR}/lib/linux.

直接來自 cgo 文檔:

解析 cgo 指令時,任何出現的字符串 ${SRCDIR} 都將替換為包含源文件的目錄的絕對路徑。這允許將預編譯的靜態庫包含在包目錄中并正確鏈接。

cgo 工具將始終使用包含路徑中的源文件目錄調用 C 編譯器;即 -I${SRCDIR} 總是隱含的。


查看完整回答
反對 回復 2022-10-10
  • 1 回答
  • 0 關注
  • 156 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號