在C应用程序中包含其他语言的库
问题描述:
我的一般问题是:在C应用程序中将其他语言的库包含在内的最常见方法是什么?例如,如果我有一个用于执行函数X
的Ruby库和一个用于执行函数Y
的Python库,我该如何用C语言编写一个程序(语言是这样的),它使用每个函数中的函数?在C应用程序中包含其他语言的库
我见过可以访问这些高级语言的C库的包装器,但是有其他方式的包装器吗?一般来说,处理这个问题有一个共同的方法吗?
答
这些本地代码库(即它们是否已被编译?)还是这些源代码库(即包含Ruby源代码的一堆文本文件)?
如果前者,使用Ruby或Lua等语言的库通常具有已发布的二进制接口(“ABI”)。这是低级别的文档,描述了它们的库及其函数如何在底层工作。通常,这些是用C或C++定义的,或者是用于实现Ruby本身的解释器/编译器的任何语言。
因此,您必须找到该文档,并找出如何调用您感兴趣的部分。有些语言甚至使用与C相同的ABI,您只需创建一个与库的内容,你可以直接调用它(这就是你如何集成例如汇编器和C,甚至C++,你可以直接生成C函数)。
如果是后者,通常需要找到一种可嵌入的语言版本,并找出如何从应用程序内部运行脚本(例如,这是通常使用Lua的方式)。
但你确定你需要给定的Ruby库吗?通常情况下,通用库是在底层使用C或C++库实现的,然后仅包装脚本语言,因此您可以跳过脚本翻译层并自己使用(也许稍微低一点的)库。
PS - 还有像SWIG这样的自动包装生成器,它将以一种语言读取文件并为您编写翻译代码。