我目前正在学习在Lisp中包装C ++代码,以便可以从Lisp调用C ++函数。
我正在学习SWIG,我想进一步了解SWIG的Allegro Common Lisp部分。我现在正在使用Allegro的Express(免费)添加,它的堆限制为50mb,因此它使我无法加载Lisp GSLL的GNU科学库。

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

我在Allegro Common Lisp Express版本中为Lisp创建了OpenCV C ++绑定,并以某种方式将其移至SBCL或CLISP,因此我可以将我的所有GSLL代码与OpenCV包装器一起使用,而不受Lisp实现的限制,或者对Allegro / SWIG合作伙伴认为,在Allegro Common Lisp中的SWIG Allegro教程中,我只能使用Allegro制造的SWIG C ++包装程序。

如果我认为Allegro Common Lisp的支持比其他实现更完整,或者如果有更好的方法包装所有OpenCV的C ++函数,或者OpenCV的C接口与C ++一样完整,请纠正我。界面,我可以将其包装。

请在适当时引用在线资源。

最佳答案

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

我的理解是,要在C ++和Common-Lisp之间进行完全互操作并不能做很多事情。我知道ECL的一些试验性分支机构试图做到这一点,并取得了一定程度的成功,但是我不认为这些分支机构已经达到了公开发行的地步。至少,如果您要走那条路,那么您将在支持非常有限的Lisp平台上运行。

您可能希望寻找另一种选择来生成C包装程序,该包装程序可能会提供更全面的结果,但它针对的是CLANG和LLVM编译器环境。如果可以接受,则可以在github上查看以下两个项目:


http://github.com/rpav/c2ffi
http://github.com/rpav/c2ffi-cffi


我确定我没有给出您可能一直希望得到的答案,但我希望它至少可以有所帮助。

关于common-lisp - 我可以在SBCL或CLISP中使用Allegro Common Lisp制造的C++包装器吗,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17926506/

10-12 14:12
查看更多