我是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