首页 > 解决方案 > 我可以使用动态链接将 go 嵌入到我的 C/C++ 项目吗?

问题描述

以python为例,一个C/C++程序可以动态加载libpython.so并创建一个python VM,然后将用户脚本提供给python VM。

他们是这样使用 go 的吗?即从用户的系统环境中动态加载。

我们想将 go 嵌入到我们的项目中进行脚本编写,但我们不想将其打包到我们的最终二进制程序中。

谢谢。

标签: cgo

解决方案


在 Linux 等某些平台上,您可以构建您的 Go 代码-buildmode=c-shared以获得一个共享库,然后可以将其链接到用另一种语言(如 C)编写的程序中。

一些示例和文档在这里:https ://github.com/vladimirvivien/go-cshared-examples

请注意,这不会使 Go 成为一种脚本语言——您仍然需要从 Go 代码构建共享库。但是,您可以在应用程序运行时构建它们并使用 and 加载dlopen()它们dlsym()。这与通过从应用程序内部启动 C 编译器然后加载它来编译 C 代码的方式相同。


推荐阅读