如何在 Go 中创建可嵌入的 C-API 库?

How to create an embeddable C-API library in Go?

我打算编写一个跨平台应用程序,它的大部分功能在所有平台上共享(Linux、OS X、Windows、iOS , Android). 这些主要是辅助函数(计算、内部列表、网络等),所以我认为将这些函数放在一个库中会很方便,我可以为每个平台编译,同时仍然能够为每个平台创建自定义 UI个别地。

我提到的这些平台上的主要语言是 C、Objective-C、C# 和 Java。所有这些语言都支持直接或通过内部包装器从库中调用 C-API 函数。由于我不想在 C/C++ 中编写 80% 的应用程序代码,因此我搜索并找到 Go.

cgo 似乎是我的问题的解决方案。
我目前的想法是用 Go 编写核心库,然后为每个平台编译它,但是,调用 go build 根本不会创建任何东西。
import "C".
我已经声明了一个 func 并在之前添加了 //export 语句。

我读到了 gccgo,但人们一直指出它已经过时,不应使用。

也许任何人都可以指出我的想法中的缺陷或帮助我将这个库文件放在一起。提前致谢。

如果您的目标是构建一个可以链接到任意 C、Objective-C 或 Java 程序的库,那么您不适合当前发布的标准工具链。有计划在未来改变这一点,但目前 Go 运行时不能嵌入到其他应用程序中。

虽然 cgo 允许您导出要从 C 调用的函数,但这仅在您从 Go 调用的 C 代码需要回调到 Go 的情况下才真正有用。