c++ - 使用 cmake 和其他库 Swig

标签 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 中包含该库,我会收到以下错误:

>>> 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/

相关文章:

c++ - 智能感知 :expected a declaration in C++

python - 在所有子目录中运行 nosetests

python - 将mp3转换为ogg然后压缩的简单方法? (Python 3)

cmake - 如何强制 ctest 只在某些子目录中运行单元测试?

c++ - CMake 生成器表达式到链接器

c++ - DLL缓存问题

c++ - 在类特化中具有任何标签的枚举类型

c++ - 如何释放 mxGetData() 分配的内存

python - 如何使用vtk选择直线上的点?

cmake - 使用 cmake + cpack 构建时如何签署 Windows 二进制文件和 NSIS 安装程序