gpt4 book ai didi

python - swig c++ 到 python (with numpy) : error: use of undeclared identifier 'import_array'

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:09:46 26 4
gpt4 key购买 nike

操作系统:macOS Sierra 10.12.4

python 发行版:Anaconda python 3.6

我正在学习如何使用 distutils 将 numpy 数组传递给 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_

我尝试将 os.environ['CC'] = 'g++'os.environ['CXX'] = 'g++' 更改为 os.environ['CC'] = 'g++-6'os.environ['CXX'] = 'g++-6'setup.py,为了用 GUN g++ 编译而不是 clang,但仍然得到类似的错误:

sample_wrap.cpp: In function 'PyObject* PyInit__sample()':
sample_wrap.cpp:4571:16: error: 'import_array' was not declared in this scope
import_array();
^

最佳答案

我会尝试添加 #define SWIG_FILE_WITH_INIT 基于这个 documentation

/* file: sample.i */
%module sample
%{
#define SWIG_FILE_WITH_INIT
#include "src/sample.h"
%}

关于python - swig c++ 到 python (with numpy) : error: use of undeclared identifier 'import_array' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43750318/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com