首页  >  文章  >  后端开发  >  如何将 Go 函数集成到现有 C 项目中:包含链接错误解决方案的分步指南?

如何将 Go 函数集成到现有 C 项目中:包含链接错误解决方案的分步指南?

Susan Sarandon
Susan Sarandon原创
2024-10-27 12:10:02951浏览

How to Integrate Go Functions into Existing C Projects: A Step-by-Step Guide with Solutions for Linking Errors?

如何在现有 C 项目中使用 Go

将 Go 函数集成到 C 程序中

将 Go 函数集成到 C 程序中涉及将 Go 文件构建为目标文件 (.o) 并将其合并到现有 C 项目的存档 (.a) 文件中。这允许从 C 程序中调用 Go 函数。

示例代码中遇到的问题

用户提供的示例展示了链接阶段的错误。这些错误源于一种误解,即与 C 程序不同,GCCGO 期望 Go 文件中有一个 main 函数。

Go 1.5 及更高版本的解决方案

在 Go 1.5 和后来的版本,这个问题已经得到解决。它允许使用 Go 工具构建 C 兼容库。通过此功能,用户可以保留问题中给出的 C 文件(main.c),并更新 Go 文件(main.go),如下所示:

<code class="go">package main

import "C"
import "fmt"

//export PrintString
func PrintString(cs *C.char) {
    s := C.GoString(cs)
    fmt.Println(s)
}

func main() {}</code>

构建 Go对象文件

要将 Go 文件构建为对象文件,请运行以下命令:

go build -buildmode c-archive -o mygopkg.a

集成到 C 项目

要将 Go 目标文件与 C 程序 (_main.c) 链接,请使用以下命令构建最终的二进制文件:

gcc -o main _main.c mygopkg.a -lpthread

共享库的替代方法

如果您更喜欢使用 Go 构建共享库,以下命令将创建 mygopkg.so:

go build -buildmode c-shared -o mygopkg.so

要将共享库与 _main.c 链接,请运行以下命令:

LD_RUN_PATH=$(pwd) gcc -o main _main.c mygopkg.so -lpthread

注意:设置 LD_RUN_PATH 以确保链接器在运行时找到当前目录中的共享库。

有关更多详细信息和见解,请参阅 Go 执行模式设计文档.

以上是如何将 Go 函数集成到现有 C 项目中:包含链接错误解决方案的分步指南?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn