我有两个文件,分别是
module.pyx
和foo.cpp
。我想要在foo.cpp
中调用在cython模块module.pyx
中声明的函数。这个函数会返回一个指向vector的指针。
module.pyx
:#distuils: language = c++
from libcpp.vector cimport vector
from cython.operator cimport dereference as deref
cdef api vector[int] *func():
cdef vector[int] *v = new vector[int]()
deref(v).push_back(3)
return v
foo.cpp
:
#include "module_api.h"
#include <vector>
#include <iostream>
using namespace std;
int main() {
import_module();
vector<int> *v = func();
cout << "v[0] = " << v[0] << endl;
}
我使用以下命令编译module.pyx
:
cython module.pyx --cplus
并使用以下命令编译foo.cpp
:
g++ foo.cpp -I/Users/richizy/anaconda/include/python2.7/
但是程序无法正常运行,出现了大量错误信息,其中包括“vector in namespace 'std' does not name a type”。请问问题出在哪里?
我正在使用Anaconda Python发行版,并进行了最近的干净和默认安装。
版本信息如下:
g++ (MacPorts gcc47 4.7.3_3+universal) 4.7.3
Cython version 0.20.1
Python 2.7.6 :: Anaconda 1.9.1 (x86_64)
Mac OS X 10.8.4
#include "module_api.h"
和#include <vector>
交换位置可以解决我的 vector 问题,但是接着我遇到了段错误。然而,我无法让文档中的delorean
示例正常工作,所以我肯定还有其他问题。 - hivert/Users/richizy/anaconda/lib/python2.7/config/libpython2.7.a
)引起的。但是,仍然像您所说的那样出现了段错误。 - richizy(*v)[0]
而不是v[0]
。 - IanH