使用SWIG将大型C-project与Python连接起来

时间:2014-02-23 19:19:52

标签: python matplotlib gnuplot swig

我想从Python的大型C项目中访问一些函数。在我看来,SWIG是可行的方式。我不习惯编程i C,而我对“make”的体验主要来自下载源代码。我想访问的函数驻留在一个大的C项目(Gnuplot)中,我不知道在这么多的源文件上使用SWIG的人。我想要访问的函数都在一个单独的c文件中,但有许多递归包含。我想就如何入门提出一些建议。

我想要访问的内容:term / emf.trm

原因:缺少对EMF-backend到matplotlib的LaTex符号的支持(这个后端甚至已从matplotlib中删除)。我在工作中坚持使用旧版本的Word,并且无法在没有EMF的情况下获得适合我的目的的程序图。我可以使用Gnuplot而不是matplotlib,但许多图是专门用于某种目的,matplotlib比Gnuplot更容易使用。

我们非常感谢任何建议。

2 个答案:

答案 0 :(得分:4)

您可以尝试使用Gnuplot.py

此外:

前段时间我使用SWIG将Wild Magic C ++库(100K +代码行)包装到Python模块中(请查看Python Wild Magic。)

由于代码库包含超过1000个C ++类,我使用GCC-XML来帮助我生成99%的SWIG接口文件。基本上这样下去了:

  1. 在所有头文件上运行gcc-xml,生成XML输出
  2. 通过解析XML
  3. 获取所有名称(func和类)的列表
  4. 在干运行模式下运行make,即make -n并捕获输出。
  5. 解析输出以按编译顺序获取所有定义文件(.c.cpp或您拥有的内容)的列表。顺序很重要,因为SWIG需要依赖顺序的接口声明。
  6. 解析上一步中的有序定义文件并grep所有#include语句。除非重复,否则可以将这些有序的#includes添加到SWIG界面文件中。
  7. 听起来你只对几个功能感兴趣而不是包装整个库,所以这可能是一种矫枉过正。你正在使用C和Fortran,所以它有点不同。但也许你觉得这种方法很有用。

    这对于Wild Magic来说很容易,因为目录结构非常扁平。 Gnuplot看起来更加模块化。

答案 1 :(得分:0)

你应该首先阅读swig手册的前几章,并为python制作一些示例项目,distrib有许多说明swig的许多不同功能,make文件已经构建,所以要少学一点