在Windows中编译SWIG python包装时,MinGW g ++找不到numpy \ arrayobject.h

时间:2013-10-23 02:20:41

标签: c++ python numpy mingw swig

在我的debian发行版中,我设法使用SWIG在C ++中构建了一个python模块。模块Amod可以在更复杂的python代码中成功导入并正常工作。这里是Linux上使用的编译:

swig -c++ -python test5.i
g++ -fPIC -c test5.cpp
g++ -fPIC -c test5_wrap.cxx -I/usr/include/python2.7
g++ -shared test5.o test5_wrap.o -o _Amod.so

但是现在我想在Windows上重复它,我不确定我在做什么。

我安装了numpy 1.7.0。和MinGW一起使用g ++,我在“PATH”环境变量中添加了swig的路径,如SWIG文档中所述。我还添加了Python 2.7.5安装路径和Python.h。

我打开Windows终端并输入:

swig -c++ -Wall -python test5.i
g++ -c -Wall test5.cpp

它编译没有问题。然后

g++ -c test5_wrap.cxx 

fatal error: Python.h: no such file or directory。我不明白,Python.h的路径不在PATH变量中!所以我输入

g++ -c test5_wrap.cxx -I C:\Python27\include

fatal error: numpy\arrayobject.h: no such file or directory。我也没有得到它,这个标题存在于C:\Python27\Lib\site-packages\numpy\core\include\numpy\中。然后我试了

g++ -c test5_wrap.cxx -I C:\Python27\include C:\Python27\Lib\site-packages\numpy\core\include\numpy\

同样的错误,所以我试过了:

g++ -c test5_wrap.cxx -I C:\Python27\include C:\Python27\Lib\site-packages\numpy\core\include\numpy\arrayobject.h

从同一个fatal error: numpy\arrayobject.h: no such file or directory开始,给出了大量错误。

如何解决? MinGW + SWIG + g ++是我的python模块编译的正确方向吗?

非常感谢。

F.M

编辑:同时我也尝试用这个setup.py编译这个带有d​​istutils的python模块:

# -*- coding: utf-8 -*-
"""
Created on Wed Oct 23 17:01:51 2013

@author: Florian
"""
from distutils.core import setup, Extension


Amod = Extension('_Amod',
                           sources=['test5_wrap.cxx', 'test5.cpp'],
                           )

setup (name = 'Amod',
       version = '0.1',
       author      = "FM",
       description = """Come on""",
       ext_modules = [Amod],
       py_modules = ["Amod"],
       )

编译:

python setup.py build_ext --compiler=mingw32 --swig-opts="-c++ -I :C/Python27/include -I :C/Python27/Lib/site-packages/numpy/core/include/"

仍然是这个该死的错误:

running build_ext
building '_Amod' extension
C:\MinGW\bin\gcc.exe -mdll -O -Wall -IC:\Python27\include -IC:\Python27\PC -c test5_wrap.cxx -o build\temp.win32-2.7\Rel
ease\test5_wrap.o
test5_wrap.cxx:3045:31: fatal error: numpy/arrayobject.h: No such file or directory
 #include <numpy/arrayobject.h>

我搜索了我第一次尝试时遇到的错误undefined reference to _imp__Py...,但是人们谈到了丢失的链接库,我没有看到我应该链接哪个库以及为什么。这有点超过我的技能。

2 个答案:

答案 0 :(得分:1)

尝试将其更改为-I C:\Python27\include -I C:\Python27\Lib\site-packages\numpy\core\include。这些路径是必需的,因此gcc知道在哪里搜索包含标题。

在* nix环境中,gcc可能会在查找包含头时查找环境变量和其他隐式搜索路径,这可能就是它成功编译的原因。但是,在Windows mingw中,您必须明确指定这些路径,以便它在正确的位置查找。

答案 1 :(得分:0)

在编译c ++代码时,我在cygwin中遇到了同样的问题。解决方案是先安装python2-devel和python2-numpy,然后使用命令“ python -m site”以查看python安装目录。使用以下find命令查找头文件:find /usr/lib/python2.7 -name“ * .h”。头文件位于目录/usr/lib/python2.7/site-packages/numpy/core/include下。将此路径包含在g ++命令的以下包含选项中:-I / usr / lib / python2.7 / site-packages / numpy / core / include。