"未定义的符号"错误,同时通过SWIG将C ++代码扩展到Python

时间:2017-05-15 12:05:48

标签: python c++ swig

我是SWIG的新手,这是我的第一个应用程序,我试图制作一个用C ++编码并尝试使用SWIG在Python中扩展它的通用List list.h中的代码如下

 #include <bits/stdc++.h>

template <typename T>
class List
{
    public:
        T* data;
        int max_items;
        int n_items;
        List(int max);
        void append(T d);
        T get(int index);
};

typedef List<int> IntList;
typedef List<float> FloatList;

list.cpp中的代码如下

#include "list.h"

template <class T> List<T>::List(int max) {
    max_items = max;
    data = new T[max_items];
    n_items = 0;
}

template <class T> void List<T>::append(T d) {
    if(n_items < max_items)
        data[n_items++] = d;
}

template <class T> T List<T>::get(int index) {
    return data[index];
}

SWIG输入接口文件list.i有以下代码

%module list_swig

%{
        #include "list.h"
%}

template <class T>
class List {
        public:
            T* data;
            int max_items;
            int n_items;
            List(int max);
            void append(T data);
            T get(int index);
};

template <class T> List<T>::List(int max) {
    max_items = max;
    data = new T[max_items];
    n_items = 0;
}

template <class T> void List<T>::append(T d) {
    if(n_items < max_items)
        data[n_items++] = d
}

template <class T> T List<T>::get(int index) {
    return data[index];
}


%template(IntPoint) List <int>;
%template(FloatPoint) List <float>;

我正在编译如下

swig -c++ -python -o list_wrap.cpp list.i
g++ -c -fPIC list.cpp
g++ -c -fPIC list_wrap.cpp -I/usr/include/python2.7
g++ -shared -o _list_swig.so list.o list_wrap.o

每一步产生输出都没有任何错误但是当我试图在python shell中导入文件时,它会给我以下错误

./_list_swig.so: undefined symbol: _ZN4ListIfE6appendE

有人可以解释为什么会发生这个错误吗?或者我犯错误的地方?
提前致谢!

修改:所有代码的链接均为https://github.com/b282022/SWIG-Experiment

0 个答案:

没有答案