我开始用 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 .