我正在开发一个项目,我想在 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 中包含该库,我会收到以下错误:
>>> 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
最佳答案
Python 需要能够在运行时找到图像库。最简单的方法是将 LD_LIBRARY_PATH 环境变量设置为包含 undefined symbol 的图像 .so 文件的文件夹。
如果您运行命令“ldd _kissCT.so”,它应该会显示它所依赖的库。
关于c++ - 使用 cmake 和其他库 Swig,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9519950/