我正在开发一个项目,我想在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
答案 0 :(得分:2)
Python需要能够在运行时找到图像库。最简单的方法是将LD_LIBRARY_PATH环境变量设置为包含图像.so文件的文件夹,该文件包含未定义的符号。
如果您运行命令“ldd _kissCT.so”,它应该显示它所依赖的库。
答案 1 :(得分:0)
实际上,由于未解析的符号已被C ++严重破坏,因此表明缺少以下链接器选项:
-lstdc++