编译C ++时无法使Cython正常工作

时间:2013-10-16 11:44:14

标签: c++ compilation cython

我正在尝试一个简单的例子来cython化一个c ++ Test类。我不能让它工作,为什么?

这是我的代码,非常基本:

mytest.h:

class Test
{
public:
    Test(unsigned test = 0);

    void print();
private:
    unsigned m_test;

};

mytest.cpp:

#include "mytest.h"
#include <iostream>
using namespace std;

Test::Test(unsigned test)
: m_test(test)
{
  cout << "Test::Test" << endl;
}
void Test::print()
{
  cout << "print:" << m_test << endl;
}

对于Cython部分,我有 test.pyx

cdef extern from "mytest.h":
  cdef cppclass Test:
    Test(unsigned int) except +
    void print()

cdef class pyTest:
  cdef Test* thisptr
    def __cinit__(self, unsigned test):
    self.thisptr = new Test(test)
  def __dealloc__(self):
    del self.thisptr

我编译:

cython --cplus test.pyx

...并收到大量错误消息,例如“Empty declarator”:

> Error compiling Cython file:
> ------------------------------------------------------------
> ...
> cdef extern from "mytest.h":
>         cdef cppclass Test:
>                 Test(unsigned int) except +
>                 void print()
>       ^
> ------------------------------------------------------------
>  
> test.pyx:4:7: Empty declarator
> 
> Error compiling Cython file:
> ------------------------------------------------------------
> ...
> cdef extern from "mytest.h":
>         cdef cppclass Test:
>                 Test(unsigned int) except +
>                 void print()
>       ^
> ------------------------------------------------------------
>
> test.pyx:4:7: Syntax error in C variable declaration

我没看到什么?

由于

2 个答案:

答案 0 :(得分:1)

我几周以前就在你身边。由于我也是Cython的新用户,我不能肯定地说,但提供以下建议。

您可能希望将以下行放在.pyx文件的顶部(在Cython教程中很容易忽略)

# distutils: language = c++
# distutils: sources = mytest.cpp.

对于编译命令,您可以使用:

cython -a test.pyx --cplus

希望它有所帮助。 :)

答案 1 :(得分:0)

几天前我遇到了完全相同的问题。问题在于print()方法的名称。出于某种原因,我不确切知道,cython不喜欢print()。如果将其更改为任何其他名称,例如printtest()。它会编译得很好。