首页 > 后端开发 > Golang > 正文

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

Susan Sarandon
发布: 2024-10-27 12:10:02
原创
951 人浏览过

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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!