【问题标题】:Can I use C++ Wrappers made in Allegro Common Lisp in SBCL or CLISP我可以在 SBCL 或 CLISP 中使用 Allegro Common Lisp 中制作的 C++ Wrappers
【发布时间】:2013-07-29 09:19:48
【问题描述】:

我目前正在学习在 Lisp 中封装 C++ 代码,以便可以从 Lisp 调用 C++ 函数。 我正在学习 SWIG,我想了解更多关于 SWIG 的 Allegro Common Lisp 部分的信息。我现在正在使用 Allegro 的 Express(免费)添加,它的堆限制为 50mb,因此它阻止我加载用于 Lisp、GSLL 的 GNU 科学库。

我想制作一个巨大的应用程序,它将使用来自 GSLL 的代码、我用 SWIG 创建的 OpenCV 的 Lisp 包装器以及我用 SWIG 创建的 C++ 代码的其他 Lisp 包装器,我希望能够使用来自 Lisp 的所有 OpenCV 的 C++ 接口函数和 SWIG 的 Allegro Common Lisp C++ 支持似乎是最完整的(如果我错了,请纠正我)和包装大多数 C++ 函数的最佳方式。 (我这么说是因为the Allegro Common Lisp section of the SWIG manualthe Common Lisp sections 大得多。

我在 Allegro Common Lisp Express 版本中为 Lisp 创建 OpenCV C++ 绑定,并以某种方式将它们移至 SBCL 或 CLISP,这样我就可以在没有堆限制或没有堆限制的 Lisp 实现中将我的所有 GSLL 代码与我的 OpenCV 包装器一起使用Allegro/SWIG 合作伙伴关系认为我只使用 Allegro 制作的 SWIG C++ 包装器和 Allegro Common Lisp 中的 SWIG Allegro 教程。

如果我错误地假设 Allegro Common Lisp 的支持比其他实现更完整,或者如果有更好的方法来包装所有 OpenCV 的 C++ 函数或者 OpenCV 的 C 接口同样完整,请纠正我作为 C++ 接口,我可以包装它。

请在相关时引用在线资源。

【问题讨论】:

    标签: common-lisp swig sbcl clisp allegro-cl


    【解决方案1】:

    针对 AllegroCL 的 SWIG 将生成特定于 Allegro 专有 FFI 的包装器,并且不能用于其他 lisp 实现。否则,用于 common-lisp 的 SWIG 可以生成针对 CFFI 的包装器,作为它支持的所有 lisp 外部接口的兼容层。然而,因此,CFFI 往往是受支持的 lisps 中的“最小公分母”,并且 SWIG 一代可能不会那么全面。

    我的理解是,在 C++ 和 Common-Lisp 之间完全互操作并没有什么可以做的。我知道 ECL 的一些实验性分支试图这样做并声称取得了一定程度的成功,但我不相信这些达到了公开发布的地步。至少,如果你要走这条路,你会在一个支持非常非常有限的 lisp 平台上运行。

    您可能希望研究生成 C 包装器的另一个选项,它可能会提供更全面的结果,但它针对 CLANG 和 LLVM 编译器环境。如果可以接受,你可以在 github 上看看以下两个项目:

    我确定我没有给出您可能想要的答案,但我希望它至少可以提供一些帮助。

    【讨论】:

      猜你喜欢
      • 2021-11-14
      • 1970-01-01
      • 2016-10-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-30
      • 2012-01-14
      相关资源
      最近更新 更多