- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
在我的 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。和带有 g++ 的 MinGW,并且我在“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:没有那个文件或目录
。我不明白,Python.h 的路径不在 PATH 变量中!?所以我输入
g++ -c test5_wrap.cxx -I C:\Python27\include
fatal error :numpy\arrayobject.h:没有这样的文件或目录
。我也不明白,这个 header 存在于 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 模块编译的正确方向吗?
非常感谢。
调频
编辑:与此同时,我还尝试使用此 setup.py 使用 distutils 编译此 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...
,但人们谈论缺少链接库,我看不出我应该链接哪个库以及为什么。这有点超出我的技能。
最佳答案
尝试将其更改为 -I C:\Python27\include -I C:\Python27\Lib\site-packages\numpy\core\include
。需要这些路径,以便 gcc 知道在哪里搜索包含 header 。
在 *nix 环境中,gcc 在查找包含 header 时可能会查找环境变量和其他隐式搜索路径,这可能就是它编译成功的原因。但是,在 Windows mingw 上,您必须明确指定这些路径,以便它看起来在正确的位置。
关于c++ - 在 Windows 中编译 SWIG python 包装器时,MinGW g++ 找不到 numpy\arrayobject.h,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19531642/
我正在制作一个 C++ 库的包装器,以便它可以从 Java 中使用,我正在用 Swig 做这个。 我面临的是我有一个类(class) SomeClass ,它有一些重载的方法( someMethod
我有许多要在 SWIG 中重命名的类。我的大部分类(class)看起来像这样some_class ,我想将其重命名为 SomeClass .这很简单: %replace("%(camelcase)s"
PyPy 有一些 compatibility limitations ,尤其是关于 CPython C API。 我用 QuickFix预编译的 SWIG 绑定(bind)附带的包,我正在考虑将它与
关闭。这个问题是off-topic .它目前不接受答案。 想改善这个问题吗? Update the question所以它是 on-topic对于堆栈溢出。 9年前关闭。 Improve this q
使用 SWIG 生成接口(interface)模块时,生成的 C/C++ 文件包含大量静态样板函数。因此,如果想通过在同一个应用程序中使用许多单独编译的小接口(interface)来模块化 SWIG
我正在应用 SWIG 手册中有关嵌套类的解决方法,该部分使用全局内部类。在这里,我将向您展示一个类似于手册中的版本,但为您尽可能地简化了。我还必须将内联定义 {} 添加到 method(),因为没有它
我有一个现有的库 (JPhysX),它是原生 C++ 库 (PhysX) 的 Java 包装器。 Java 库使用 SWIG 生成的类型,例如 com.jphysx.SWIGTYPE_p_NxStre
有没有办法动态向下转换 swig 对象的 swig 代理? 这样做的原因是为了模拟 C++ 向下转换,但纯粹来自 python。例如,典型的 C++ 用法是 MyBase* obj = new MyB
我在远程服务器上工作,所以我在本地安装了 swig,使用 -prefix=/home/user/directory。 我有一个来自同事的 makefile,其中包含以下命令: swig $(SWIG_
据我所知,在用于将 c++ 文件编译为 python 扩展模块的 .i 文件中,我们可以添加一些 python 代码,如下所示(来自 example for adding additional pyt
我的 Swig 文件 (.i) 中有以下代码: %extend vgSofa::handler::VertexShape { vgd::Shp createVSWithNode( so
我有一个用 swig 包装的类的 C++ 代码。我无法修改代码或包装。在 python 中,我使用 ctypes 拥有一个指向所述 C++ 类的实例的指针。如何围绕该指针创建一个 swig 包装器?
我开始掌握 SWIG 的窍门,SWIG 的最新版本 (v3.0) 似乎可以处理我开箱即用所需的一切,包括 C++11 功能,但我遇到了麻烦开始在我的导演类(class)中使用 shared_ptr。
我正在使用 javacode 类型映射来添加一些附加函数来代替 SWIG 生成的函数。我想删除 SWIG 为 unsigned char mac[6]; 生成的默认 getter 和 setter(p
我正在使用 SWIG 为我的 C 库生成 Python 语言绑定(bind)。我已经设法构建了绑定(bind)和导出的数据结构,但在使用该库时我不得不跳过一些障碍。 例如,C 头文件的数据类型和函数原
我最近在node-js应用程序中从jade模板引擎切换到了swig。在使用jade时我使用了命令 jade.render('/sample.jade',{obj:object});渲染模板并传递对象。
我在我的 python 代码中发现了瓶颈,尝试了 Psycho 等。然后决定编写一个 c/c++ 扩展来提高性能。 在 swig 的帮助下,您几乎不需要关心参数等。一切正常。 现在我的问题是:swig
由于 SWIG 无法解析 __attribute__((packed))在我想包装的一些 C 结构上,我通过放置一个 #define __attribute__(x) 在我的.i文件。 这什么时候会来
我有一个包含 C++ header 的 SWIG 文件。 痛饮文件: %module my_module %{ #include "my_c_file.h" %} %include "my_c_fil
我正在尝试学习如何使用 SWIG,并且想知道我是否正在执行一些不需要执行的额外步骤。我目前有文件 Dog.cpp、Dog.h 和 Dog.i。我正在尝试使用 SWIG 包装 Dog.cpp 以便在 P
我是一名优秀的程序员,十分优秀!