我正在尝试使用swig用python包装一些c ++代码,我需要将NumPy数组发送到c ++向量类中以进行某些处理。
我的问题是我似乎无法访问swig .i文件中的“ numpy.i”。
如何导入/包含numpy.i?
add_vector.i
%module add_vector
%{
#define SWIG_FILE_WITH_INIT
#include "add_vector.h"
%}
%include "numpy.i"
%init %{
import_array();
%}
%include std_vector.i
%template(vecInt) std::vector<int>;
%include "add_vector.h"
Makefile
all:
rm -f *.so *.o *_wrap.* *.pyc *.gch add_vector.py
swig -c++ -python add_vector.i
g++ -O0 -g3 -fpic -c add_vector_wrap.cxx add_vector.h add_vector.cpp -I/home/tools/anaconda3/pkgs/python-3.7.3-h0371630_0/include/python3.7m/
g++ -O0 -g3 -shared add_vector_wrap.o add_vector.o -o _add_vector.so
tester.py
import add_vector as vec
import numpy as np
a = np.array([1,2,3])
b = np.array([4,5,6])
c = np.empty(len(a))
vec.add(c,a,b)
print('c:', c)
输出:
rm -f *.so *.o *_wrap.* *.pyc *.gch add_vector.py
swig -c++ -python add_vector.i
add_vector.i:7: Error: Unable to find 'numpy.i'
Makefile:2: recipe for target 'all' failed
make: *** [all] Error 1
如果有问题,我正在使用debian。
谢谢!
答案 0 :(得分:2)
将numpy.i
复制到add_vector.i
所在的文件夹中。
或使用命令行选项-lifile
并为其指定numpy.i文件的路径。
swig -l/path/to/numpy.i ...
有关SWIG命令行选项的列表,请参见http://www.swig.org/Doc3.0/SWIGDocumentation.html#SWIG_nn2