首页 > 后端开发 > Golang > 如何将 Go 代码集成到我现有的 C 项目中?

如何将 Go 代码集成到我现有的 C 项目中?

DDD
发布: 2024-12-17 18:48:13
原创
476 人浏览过

How Can I Integrate Go Code into My Existing C Project?

将 Go 代码集成到现有的 C 项目中

问题:
是否可以调用 Go 代码来自 C 程序,如果是这样,这怎么可能

答案:
是的,Go 1.5 引入了 -buildmode=c-archive 模式,该模式允许将 Go 代码编译成适合链接到 C 程序的存档。要将 Go 代码集成到现有的 C 项目中:

  1. 标记要导出的函数:

    • 要从 C 调用的函数必须在 Go 代码中用 //export 注释进行标记。
    • 确保包含这些函数的 Go 包已命名main。
    • 包含一个名为 main 的函数,即使它是空的。
    • 导入 C 包。
  2. 编译去存档:

    • 使用以下命令将 Go 代码编译为 C 可调用静态库:

      go build -buildmode=c-archive foo.go
      登录后复制
      登录后复制
    • 这将生成一个存档和一个头文件(例如 foo.a 和foo.h).
  3. 链接 C 程序:

    • 在 C 程序中,包含生成的头文件:

      #include "foo.h"
      登录后复制
    • 链接使用 -pthread 选项针对 Go 存档:

      gcc -pthread foo.c foo.a -o foo
      登录后复制
      登录后复制
    • 这将允许 C 程序调用导出的 Go 函数。

示例:

考虑以下 Go 代码(foo.go):

package main

import "C"
import "fmt"

//export PrintInt
func PrintInt(x int) {
    fmt.Println(x)
}

func main() {}
登录后复制

将其编译成存档:

go build -buildmode=c-archive foo.go
登录后复制
登录后复制

然后,在 C 程序 (foo.c) 中:

#include "foo.h"

int main(int argc, char **argv) {
    PrintInt(42);
    return 0;
}
登录后复制

编译它:

gcc -pthread foo.c foo.a -o foo
登录后复制
登录后复制

运行 foo 将打印“42”。

以上是如何将 Go 代码集成到我现有的 C 项目中?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板