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