【问题标题】:SWIG Attribute Error: module has no attribute 'delete_...'SWIG 属性错误:模块没有属性“删除_...”
【发布时间】:2021-09-25 12:17:28
【问题描述】:

我一直试图让它工作一段时间。我试图在 swig 中包装很多 c++ 类,但我什至无法让第一个类工作。错误在底部。这是我的接口文件 setup.py 和类文件。

界面

//This file is automatically generated from "build_swig_files.py
//Makes changes to build_swig_files.py to edit jcm.i
%module jcm
%{
#include "jtag/GenericJTAGDevice.h"

typedef unsigned int u32;
%}

class GenericJTAGDevice {
 public:

  virtual ~GenericJTAGDevice();
  GenericJTAGDevice(int irLength, int idCode);

  unsigned int getIrLength();

  unsigned int getIdCode();

 private:
  unsigned int idCode;

  unsigned int irLength;
};
typedef unsigned int u32;
%include <std_string.i>
using std::string;

%include "cpointer.i"
%pointer_functions(u32, u32p);

%include "carrays.i"
%array_class(u32, u32a);

%include "std_vector.i"
namespace std {
    %template(IntVector) vector<int>;
}

setup.py

from distutils.core import setup, Extension


jcm_sources = [
    "jcm.i",
    "/root/git/jcm/jcm_source/base/src/jtag/GenericJTAGDevice.cpp"
]

jcm_module = Extension('_jcm', 
                        sources=jcm_sources,
                        swig_opts=[ '-I/root/git/jcm/jcm_source/base/include',
                                    '-I/root/git/jcm/jcm_source/base/include/jtag',
                                    '-I/root/git/jcm/jcm_source/base/include/util',
                                    '-I/root/git/jcm/jcm_source/base/include/xilinx',
                                    '-c++'],
                        include_dirs=[  '/root/git/jcm/jcm_source/base/include',
                                        '/root/git/jcm/jcm_source/base/include/jtag',
                                        '/root/git/jcm/jcm_source/base/include/util',
                                        '/root/git/jcm/jcm_source/base/include/xilinx'],
                        libraries=['supc++'])

setup (name = 'jcm', version = '0.3', author = 'BYUCCL', ext_modules = [jcm_module], py_modules = ["jcm"])

类头

#ifndef GENERIC_JTAG_DEVICE_H
#define GENERIC_JTAG_DEVICE_H

#include <string>
#include <vector>

//#include "JTAGDevice.h"
using namespace std;

/**
 * @brief Basic implementation of a JTAGDevice
 *
 * \class GenericJTAGDevice
 *
 **/
class GenericJTAGDevice {
 public:

  virtual ~GenericJTAGDevice();

  GenericJTAGDevice(int irLength, int idCode);

  unsigned int getIrLength();

  unsigned int getIdCode();

 private:
  unsigned int idCode;

  unsigned int irLength;
};

#endif  // GENERIC_JTAG_DEVICE_H

这是错误:

>>> import sys
>>> sys.path.insert(0, '/root/git/JCM/jcm_source/python/swig')
>>> import jcm
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/root/git/jcm/jcm_source/python/swig/jcm.py", line 64, in <module>
    class GenericJTAGDevice(object):
  File "/root/git/jcm/jcm_source/python/swig/jcm.py", line 67, in GenericJTAGDevice
    __swig_destroy__ = _jcm.delete_GenericJTAGDevice
AttributeError: module '_jcm' has no attribute 'delete_GenericJTAGDevice'

我在接口文件中尝试了几种变体,例如没有完整的类定义而只使用 %include GenericJTAGDevice.h。我感觉它与虚拟析构函数有关,但我不知道如何解决这个问题,因为我需要析构函数。

编辑:我尝试了另一个类,它做了同样的事情。所以也许我对接口文件的理解有误。

编辑:我正在运行的只是 python3 setup.py build

【问题讨论】:

    标签: python c++ swig


    【解决方案1】:

    所以我之前在下面的链接中看到了答案,但不明白它在说什么。基本上,我构建 swig 的过程不包括制作新的 _jcm.so。我第一次运行它的时候几乎就是这样,之后我对 .i 或代码或 setup.py 所做的所有更改都没有任何意义,因为 _jcm.so 没有被重写。就我而言,我从我的 make 文件中运行“make clean”,它会删除 _jcm.so。之后我再次构建 _jcm.so,然后运行 ​​setup.py。

    简单,但很难找到。

    http://swig.10945.n7.nabble.com/Req-module-object-has-no-attribute-delete-TSP-CA-td2271.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-29
      • 2021-07-17
      • 2018-01-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多