c - 我可以使用动态链接将 go 嵌入到我的 C/C++ 项目吗?
问题描述
以python为例,一个C/C++程序可以动态加载libpython.so并创建一个python VM,然后将用户脚本提供给python VM。
他们是这样使用 go 的吗?即从用户的系统环境中动态加载。
我们想将 go 嵌入到我们的项目中进行脚本编写,但我们不想将其打包到我们的最终二进制程序中。
谢谢。
解决方案
在 Linux 等某些平台上,您可以构建您的 Go 代码-buildmode=c-shared
以获得一个共享库,然后可以将其链接到用另一种语言(如 C)编写的程序中。
一些示例和文档在这里:https ://github.com/vladimirvivien/go-cshared-examples
请注意,这不会使 Go 成为一种脚本语言——您仍然需要从 Go 代码构建共享库。但是,您可以在应用程序运行时构建它们并使用 and 加载dlopen()
它们dlsym()
。这与通过从应用程序内部启动 C 编译器然后加载它来编译 C 代码的方式相同。
推荐阅读
- python - 将日期转换为格式 %d%m%y Python
- c++ - * 和 & 的使用?
- javascript - 如何使用 React 动态删除组件
- java - 通过搜索child / Spring boot JPA + PostgresSQL找到父元素
- android - 没有得到预期的意图输出
- r - 使用 R 从 bernoulli(p) 生成样本
- azure-devops - 在运行时在 azure devops 管道中定义列表变量
- c++ - C++ for 循环如何处理在 for 循环的 init 语句中声明的变量?
- algorithm - 对于包含 1000 位的文件(霍夫曼算法),我们希望的最大压缩是多少?
- laravel - 更改 Yajra 数据表即服务的日期格式