构建简单的 cgo 模块时出现问题
Problems building a simple cgo module
Ubuntu。 vscode 1.62.1。 go1.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 failed to return CompiledGoFiles. This may indicate failure to perform cgo processing; try building at the command line. See https://golang.org/issue/38990.
并且:
could not import C (cgo preprocessing failed) (compile)
我阅读了引用的问题,但不确定如何处理这些信息。
我不确定如何继续前进。
C编译器不是在源目录下执行的,而是在一个只包含中间文件的临时目录下执行的,例如编译为静态库(.a)的go文件。因此,LDFLAG -Llib/linux
指向一个不存在的目录。
要解决此问题,只需将该标志替换为 -L${SRCDIR}/lib/linux
。
直接来自 cgo 文档:
When the cgo directives are parsed, any occurrence of the string ${SRCDIR} will be replaced by the absolute path to the directory containing the source file. This allows pre-compiled static libraries to be included in the package directory and linked properly.
The cgo tool will always invoke the C compiler with the source file's directory in the include path; i.e. -I${SRCDIR} is always implied.
Ubuntu。 vscode 1.62.1。 go1.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 failed to return CompiledGoFiles. This may indicate failure to perform cgo processing; try building at the command line. See https://golang.org/issue/38990.
并且:
could not import C (cgo preprocessing failed) (compile)
我阅读了引用的问题,但不确定如何处理这些信息。
我不确定如何继续前进。
C编译器不是在源目录下执行的,而是在一个只包含中间文件的临时目录下执行的,例如编译为静态库(.a)的go文件。因此,LDFLAG -Llib/linux
指向一个不存在的目录。
要解决此问题,只需将该标志替换为 -L${SRCDIR}/lib/linux
。
直接来自 cgo 文档:
When the cgo directives are parsed, any occurrence of the string ${SRCDIR} will be replaced by the absolute path to the directory containing the source file. This allows pre-compiled static libraries to be included in the package directory and linked properly.
The cgo tool will always invoke the C compiler with the source file's directory in the include path; i.e. -I${SRCDIR} is always implied.