Python 目标包装 C++ class 的 SWIG 错误

SWIG error for Python target wrapping C++ class

我正在尝试包装一个 C++ 库,它可以通过单个 class 和 Python (3.6.2) 使用 SWIG 访问。

可在此处找到 C++ 库: https://github.com/Navigator-Data/navdb-clients/tree/master/lang_clients/cpp_client

这是我的 cpp_client_api.i 文件:

/* File : cpp_client_api.i */
%module cpp_client_api

%{
#include "../cpp_client/cpp_client_api.hpp"
%}

%include "../cpp_client/cpp_client_api.hpp"

生成 .py 文件后,我发现我必须重命名它以使用下划线作为前缀。

当我 运行 一个测试 Python 程序使用新生成的 .py 文件时,我得到这个错误:

python ./n*
Traceback (most recent call last):
  File "./navdb_python_client_test.py", line 24, in <module>
    from _cpp_client_api import CppClientApi
  File "../_cpp_client_api.py", line 98, in <module>
    class CppClientApi(_object):
  File "../_cpp_client_api.py", line 135, in CppClientApi
    __swig_destroy__ = _cpp_client_api.delete_CppClientApi
AttributeError: module '_cpp_client_api' has no attribute 'delete_CppClientApi'

看起来 delete_CppClientApi 是一个用于调用 class 析构函数的通用函数。原来的 class 没有我专门写的析构函数,我不确定这是否有问题。欢迎任何建议。

我最终使用 distutils 编译了 Swig 包装器代码:

python setup.py build_ext --inplace

贾森