使用cmake和其他库进行Swig

时间:2012-03-01 16:24:23

标签: c++ python cmake swig

我正在开发一个项目,我想在Python中使用C ++库。经过一番研究后,我发现Swig是一个很好的方法(一个小例子有效)。

所以现在我试图将Swig包含在cmake中以使事情变得更加舒适。

就我而言,我有一个非常小的程序来测试:

#include "ct.h"
using namespace std;

int main(int argc, char const *argv[])
{
    /* code */
    return 0;
}

int test()
{
    Image image(10,11);
    cout << "hallo"<< endl;

    return 3;
}

Image类在标题“image.h”中定义,该标题包含在“ct.h”中。这可能是这里的问题,因为包含Image类的库需要链接到由Swig生成的库。 我不确定这一点......特别是,我不知道该怎么做。我无法在手册中找到任何内容。

无论如何,如果我想在python中包含lib,我会收到以下错误:

>>> import kissCT
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "kissCT.py", line 25, in <module>
    _kissCT = swig_import_helper()
  File "kissCT.py", line 21, in swig_import_helper
    _mod = imp.load_module('_kissCT', fp, pathname, description)
ImportError: ./_kissCT.so: undefined symbol: _ZN5ImageC1Eii

相关的Swig文件如下所示:

/* kissCT test module */

%module kissCT
%{
#import "ct.h"
extern int test();
%}
extern int test();

我希望,这一切都不会令人困惑,如果有人知道我做错了什么,我真的很感激。

编辑:相关的cmake文件看起来像this

2 个答案:

答案 0 :(得分:2)

Python需要能够在运行时找到图像库。最简单的方法是将LD_LIBRARY_PATH环境变量设置为包含图像.so文件的文件夹,该文件包含未定义的符号。

如果您运行命令“ldd _kissCT.so”,它应该显示它所依赖的库。

答案 1 :(得分:0)

实际上,由于未解析的符号已被C ++严重破坏,因此表明缺少以下链接器选项:

-lstdc++