在C应用程序中包含其他语言的库

时间:2016-11-04 02:19:50

标签: c programming-languages

我的一般问题是:在C应用程序中将库包含在其他语言中的最常用方法是什么?

例如,如果我有一个用于执行函数X的Ruby库,以及一个用于执行函数Y的Python库,那么如何用C编写程序(语言就是这样)使用每个功能?

我见过包装器可以访问这些更高级语言的C库,但是有没有其他方式的包装器?通常有一种常见的处理方法吗?

1 个答案:

答案 0 :(得分:1)

这些本机代码库(即它们是否已被编译?)或者是这些源库(即包含Ruby源代码的一堆文本文件)?

如果是前者,Ruby或Lua等语言中的库通常都有一个已发布的二进制接口(“ABI”)。这是一个低级文档,描述了它们的库及其功能是如何工作的。通常,这些是用C或C ++定义的,或者用于实现Ruby本身的解释器/编译器的任何语言。

所以你必须找到那些文档,并找出如何调用你感兴趣的部分。有些语言甚至使用与C相同的ABI,你只需要创建一个与内容相匹配的头文件你可以直接调用它(这就是你如何集成例如汇编程序和C,甚至C ++,你可以生成直接的C函数)。

如果是后者,您通常需要找到该语言的可嵌入版本,并了解如何从应用程序内部运行脚本(例如,这通常是使用Lua的方式)。

但是你确定你需要给定的Ruby库吗?通常,公共库是使用C或C ++库实现的,然后只是为脚本语言包装,因此您可以跳过脚本转换层并自己使用(可能稍微更低级别)库。

PS - 还有自动包装生成器,如SWIG,它将以一种语言读取文件并为您编写翻译代码。