1
OS:MacOSのシエラ10.12.4SWIGのC++(numpyの付き)のpythonへ:エラー:宣言されていない識別子 'import_array' の使用
Python配布:アナコンダのpython 3.6
私はnumpyのを渡す方法を学んでいますdistutilsを使ってC++に配列します。私が実行したときに
エラーがありますが発生しました:
$ python setup.py build_ext
エラー:
sample_wrap.cpp:4571:3: error: use of undeclared identifier 'import_array'
import_array();
^
1 error generated.
ファイル:sample.i
/* file: sample.i */
%module sample
%{
/* include C++ header files necessary to compile the interface */
#include "src/sample.h"
%}
%include "typemaps.i"
%include "src/numpy.i"
%init %{
import_array();
%}
%apply (int DIM1, double* IN_ARRAY1) {(int n, double *a), (int m, double *b)};
%apply (int DIM1, double* ARGOUT_ARRAY1) {(int size, double *arr)};
%include "src/sample.h"
ファイル:setup.py
# ----- file: setup.py -----
from distutils.core import setup, Extension
import numpy
import os
name = "sample" # name of the module
version = "1.0" # the module's version number
os.environ['CC'] = 'g++';
os.environ['CXX'] = 'g++';
setup(name=name, version=version,
ext_modules=[Extension(name='_sample',
sources=["sample.i", "src/sample.cpp"],
include_dirs=['src',numpy.get_include()],
swig_opts=["-c++"]
)]
)
を
ファイル:src/sample.cpp
/* ----- file: src/sample.cpp ----- */
#include <cmath>
#include "sample.h"
double dot(int n, double *a, int m, double *b){
double sum = 0.0;
for (int i=0; i<n; ++i){
sum += a[i]*b[i];
}
return sum;
}
void arange(int size, double *arr){
for (int i=0; i<size; ++i)
arr[i] = i;
}
ファイル:src/sample.h
/* ----- file: src/sample.h ----- */
#ifndef SAMPLE_H_
#define SAMPLE_H_
double dot(int n, double *a, int m, double *b);
void arange(int size, double *arr);
#endif // SAMPLE_H_
私はGUNのG ++打ち鳴らすないでコンパイルするためには、os.environ['CC'] = 'g++-6'
とsetup.py
でos.environ['CXX'] = 'g++-6'
へos.environ['CC'] = 'g++'
とos.environ['CXX'] = 'g++'
を変更しようとしましたが、依然として同様のエラーが発生する:
sample_wrap.cpp: In function 'PyObject* PyInit__sample()':
sample_wrap.cpp:4571:16: error: 'import_array' was not declared in this scope
import_array();
^