我可以使用动态链接嵌入我的C / C ++项目吗?

时间:2018-12-07 23:18:47

标签: c go

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

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

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

谢谢。

1 个答案:

答案 0 :(得分:2)

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

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

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