首页 >后端开发 >Golang >如何使用包含 C 代码的包正确编译 Golang 项目

如何使用包含 C 代码的包正确编译 Golang 项目

WBOY
WBOY转载
2024-02-06 10:24:031004浏览

如何使用包含 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删除