C ++ API声明因Cython而失败

富裕

我有两个文件module.pyxfoo.cpp我希望能够调用的函数,则用Cython模块中声明module.pyx,中foo.cpp此函数返回指向向量的指针:

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/

但它不起作用。我收到一个巨大的错误,指出“在命名空间'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

brm

为了能够在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函数initmodule()不幸的是,似乎在生成的头文件中没有此函数的声明,因此我们必须手动将其添加到main之上:

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Cython的C ++ API声明失败

来自分类Dev

循环依赖 C++ 因前向声明而失败

来自分类Dev

C#ValidationResult值相等声明因Assert.AreEqual失败

来自分类Dev

C#类型推断因包含默认参数的方法而失败

来自分类Dev

身份验证因多个线程而失败C#

来自分类Dev

SonarQube后台任务因C#失败

来自分类Dev

C 插入排序程序因输入多而失败

来自分类Dev

cython:const和C ++方法声明中的除外

来自分类Dev

Cython:使用将Cython嵌入C的API的分段错误

来自分类Dev

C ++调试声明失败:“字符串不为null终止”

来自分类Dev

C ++使前向声明失败-在docker中运行

来自分类Dev

Hadoop Job因大数据上的本机SimString C代码失败

来自分类Dev

元数据库嵌入问题因声明失败而失败:(整数?卡号)

来自分类Dev

支持的API测试失败(C ++ / CX)

来自分类Dev

RESTful API-WooCommerce REST API请求因curl失败

来自分类Dev

获取错误调试声明失败:表达式c> = -1 && c <= 255

来自分类Dev

Applinx API中的GXWaitForCursor总是因超时而失败

来自分类Dev

Google Speech-to-Text API因多重处理python失败

来自分类Dev

Applinx API中的GXWaitForCursor总是因超时而失败

来自分类Dev

印前检查请求因window.fetch api而失败

来自分类Dev

ExpectSaga认沽声明因具有多个认沽效果而失败

来自分类Dev

模板类中对is_base_of的静态声明因MSVC中的意外类型而失败

来自分类Dev

在C ++中嵌入Cython

来自分类Dev

Cython:使用C ++流

来自分类Dev

C找出大量的素因

来自分类Dev

C找出大量的素因

来自分类Dev

C ++ for-each语句触发“向量迭代器不兼容”声明失败:this-> _ Getcont()== 0

来自分类Dev

在C / C ++中声明变量

来自分类Dev

安装python-dev和链接库后,Cython中的Hello World程序因gcc失败

Related 相关文章

  1. 1

    Cython的C ++ API声明失败

  2. 2

    循环依赖 C++ 因前向声明而失败

  3. 3

    C#ValidationResult值相等声明因Assert.AreEqual失败

  4. 4

    C#类型推断因包含默认参数的方法而失败

  5. 5

    身份验证因多个线程而失败C#

  6. 6

    SonarQube后台任务因C#失败

  7. 7

    C 插入排序程序因输入多而失败

  8. 8

    cython:const和C ++方法声明中的除外

  9. 9

    Cython:使用将Cython嵌入C的API的分段错误

  10. 10

    C ++调试声明失败:“字符串不为null终止”

  11. 11

    C ++使前向声明失败-在docker中运行

  12. 12

    Hadoop Job因大数据上的本机SimString C代码失败

  13. 13

    元数据库嵌入问题因声明失败而失败:(整数?卡号)

  14. 14

    支持的API测试失败(C ++ / CX)

  15. 15

    RESTful API-WooCommerce REST API请求因curl失败

  16. 16

    获取错误调试声明失败:表达式c> = -1 && c <= 255

  17. 17

    Applinx API中的GXWaitForCursor总是因超时而失败

  18. 18

    Google Speech-to-Text API因多重处理python失败

  19. 19

    Applinx API中的GXWaitForCursor总是因超时而失败

  20. 20

    印前检查请求因window.fetch api而失败

  21. 21

    ExpectSaga认沽声明因具有多个认沽效果而失败

  22. 22

    模板类中对is_base_of的静态声明因MSVC中的意外类型而失败

  23. 23

    在C ++中嵌入Cython

  24. 24

    Cython:使用C ++流

  25. 25

    C找出大量的素因

  26. 26

    C找出大量的素因

  27. 27

    C ++ for-each语句触发“向量迭代器不兼容”声明失败:this-> _ Getcont()== 0

  28. 28

    在C / C ++中声明变量

  29. 29

    安装python-dev和链接库后,Cython中的Hello World程序因gcc失败

热门标签

归档