编译 swig 输出时未找到 arrayobject.h

Posted

技术标签:

【中文标题】编译 swig 输出时未找到 arrayobject.h【英文标题】:arrayobject.h not found while compiling swig output 【发布时间】:2017-09-22 10:34:20 【问题描述】:

我发现人们对这个文件有很多类似的问题。我知道头文件在哪里,我用-I 解决g++,因为人们通常会回答以前的问题。我都做了,但是没有用。1,2

sum_array_wrap.cpp:3124:31: fatal error: numpy/arrayobject.h: No such file or directory
compilation terminated.
g++: error: sum_array_wrap.o: No such file or directory

build.sh

swig -python -c++ -o sum_array_wrap.cpp sum_array.i
g++ -c sum_array.cpp -o sum_array.o -fpic -std=c++0x
g++ -I/usr/include/python2.7 -I /usr/local/lib/python2.7/dist-packages/numpy/core/include/numpy/ -c sum_array_wrap.cpp -o sum_array.o -fpic -std=c++0x
g++ sum_array_wrap.o sum_array.o -o _sum_array.so -shared -Wl,-soname,_sum_array

你有解决办法吗? codes.zip

/* File sum_array.cpp */

/* Define function implementation */
double sum_array(double* input_array, int length) 

  /* Initialize sum */
  double sum = 0.;

  /* Compute sum of array elements */
  for (int i=0; i < length; i++)
    sum += input_array[i];

  return sum;


//*******************************************************//

/* File sum_array.h */

/* Define function prototype to take in a NumPy array */
double sum_array(double* input_array, int length);

//*******************************************************//
/* File sum_array.i */
%module sum_array

%
  #define SWIG_FILE_WITH_INIT
  #include "sum_array.h"
%

/* Include the NumPy typemaps library */
%include "numpy.i"

%init %
  import_array();
%

/* Typemap for the sum_list(double* input_list, int length) C/C++ routine */
%apply (double* IN_ARRAY1, int DIM1) (double* input_array, int length);
/*the first tuple is a pair of the typemap (array type and dimension) 
while the second is the function signature to match using that typemap.*/

%include "sum_array.h"

【问题讨论】:

【参考方案1】:

你通过了-I /usr/local/lib/python2.7/dist-packages/numpy/core/include/numpy,但 SWIG 期望你在“include”处停下来,因为它正在寻找 numpy/arrayobject.h

【讨论】:

以上是关于编译 swig 输出时未找到 arrayobject.h的主要内容,如果未能解决你的问题,请参考以下文章

ImportError:在 python 中导入 swigged c++-class 时未定义的符号

编译 SWIG 输出的包装器模块时出现 6 个错误?

为 C++ 编译时未找到符号,但为 C 找到了符号

尝试编译时未找到名称空间错误

是否可以拆分 SWIG 模块进行编译,但在链接时重新加入?

在 Visual Studio 2019 中编译默认 Angular 项目时未找到(但已安装)node.js