C++API声明与Cython一起失败
C++ API declaration fail with Cython
我有两个文件module.pyx
和foo.cpp
。我希望能够在foo.cpp
中调用在cython模块module.pyx
中声明的函数。此函数返回指向矢量的指针:
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
和带有的CCD_ 9
g++ foo.cpp -I/Users/richizy/anaconda/include/python2.7/
但它不起作用。我得到了一个巨大的错误,声明"命名空间'std'中的向量没有命名类型",以及其他许多事情。问题出在哪里?
我使用的是Anaconda Python发行版,我最近刚刚做了一次清理;默认安装。
版本:
g++(MacPorts gcc47 4.7.3_3+通用(4.7.3
Cython版本0.20.1
Python 2.7.6::Anaconda 1.9.1(x86_64(
Mac OS X 10.8.4
要使用C或C++应用程序中的python引擎,您需要确保在开始时调用Py_Initialize()
的main()
函数,并且Py_Finalize()
在终止您也没有看到import_module()
函数实际上会产生一个错误,但它使用python错误机械装置您可以通过添加以下代码使其可见import_module()
:以下
if (PyErr_Occurred())
{
PyErr_Print();
return -1;
}
如果你这样做,你会看到以下错误出现:
ImportError: No module named module
为了能够使用Cython模块,您必须确保在本例中,调用该模块的init函数CCD_ 16。不幸的是该函数不存在于生成的头文件中,所以我们必须手动将其添加到主菜单之上:
PyMODINIT_FUNC initmodule(void);
与放置vector
一起包括第一行和第二行在cout
行中进行修复,然后代码变为:
#include <vector>
#include <iostream>
#include "module_api.h"
using namespace std;
PyMODINIT_FUNC initmodule(void);
int main() {
Py_Initialize();
initmodule();
import_module();
if (PyErr_Occurred())
{
PyErr_Print();
return -1;
}
vector<int> *v = func();
cout << "v[0] = " << (*v)[0] << endl;
Py_Finalize();
return 0;
}
至少在我的系统上,它会产生输出:
v[0] = 3
- 如果没有malloc,链表实现将失败
- 模板参数替换失败,并且未完成隐式转换
- 具有默认模板参数的多态类的模板推导失败
- 视图中的参数推导失败:take_while
- 如何将enable-if与模板参数和参数包一起使用
- 如何将PERF_AMPLE_READ与mmap一起使用
- 链接到自行创建的dll失败
- 如何将两个不同矢量的同一位置的两个元素组合在一起
- 带有特殊路径部分的"std::filesystem::weakly_canonical"失败
- GetShortPathName在网络驱动器上使用中文文件夹时失败
- gcc和c++17的过载解析失败
- 为什么使用 P/Invoke 调用 dll 时,某些计算机中的 LoadLibrary 失败?
- 在WSL:configure_file上对config_file的每次调用都失败:配置文件时出现问题
- 与卡特琳娜一起卷曲C++失败并得到"Undefined symbols for architecture x86_64"
- Googletest 在 bazel test 中永远不会失败(在它应该失败的地方),但与 cmake & clion 一起工作
- 将 dirent->d_name 与字符串一起使用失败
- 与长路径一起使用时,创建目录失败并显示错误 123
- C++ unordered_map与矢量一起使用时失败
- 为什么mem_fn在与smatch::str一起使用时编译失败?
- C++API声明与Cython一起失败