【问题标题】:Include libraries in other languages in a C application在 C 应用程序中包含其他语言的库
【发布时间】:2016-11-04 02:19:50
【问题描述】:

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

例如,如果我有一个用于执行函数 X 的 Ruby 库和一个用于执行函数 Y 的 Python 库,我如何用 C(即语言)编写一个使用这些函数的程序每一个?

我已经看到了可以访问这些高级语言中的 C 库的包装器,但是是否有相反的包装器?一般有没有通用的处理方法?

【问题讨论】:

    标签: c programming-languages


    【解决方案1】:

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

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-12
      • 1970-01-01
      • 1970-01-01
      • 2014-01-28
      • 2016-08-14
      • 1970-01-01
      • 2014-04-11
      • 1970-01-01
      相关资源
      最近更新 更多