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 预处理失败)(编译)我阅读了引用的问题,但我不确定如何处理这些信息。我不知道如何在这里前进。
1 回答

隔江千里
TA贡献1906条经验 获得超10个赞
C 编译器不在源目录中执行,而是在仅包含中间文件的临时目录中执行,例如编译为静态库 (.a) 的 go 文件。因此,LDFLAG-Llib/linux
指向一个不存在的目录。
要解决此问题,只需将该标志替换为-L${SRCDIR}/lib/linux
.
直接来自 cgo 文档:
解析 cgo 指令时,任何出现的字符串 ${SRCDIR} 都将替换为包含源文件的目录的绝对路径。这允许将预编译的静态库包含在包目录中并正确链接。
cgo 工具将始终使用包含路径中的源文件目录调用 C 编译器;即 -I${SRCDIR} 总是隐含的。
- 1 回答
- 0 关注
- 166 浏览
添加回答
举报
0/150
提交
取消