2014-12-04 6 views
7

Ich wickle eine C++ - Klasse mit Python und ich kann keine C++ 11-Funktionen mit dem Cython-Modul kompilieren.Cython erkennt keine C++ 11-Befehle

Alles kompiliert in Ordnung, wenn das C++ allein kompiliert wird. Aber wenn ich dieses setup.py unten laufen:

setup(
    ext_modules = cythonize(
     "marketdata.pyx",   # our Cython source 
     sources=["cpp/OBwrapper.cpp, cpp/OrderBook/orderbook.h, cpp/OrderBook/orderbook.cpp"], # additional source file(s) 
     language="c++",    # generate C++ code 
     extra_compile_args=["-std=c++11"] 
    )) 

In meinen .pyx Datei-Header:

# distutils: language = c++ 
# distutils: sources = cpp/OBwrapper.cpp cpp/OrderBook/orderbook.cpp 

ich eine Tonne von Fehlern, die mit ihnen zu tun haben, nicht C++ 11 Befehle zu erkennen , wie 'Auto'.

Zum Beispiel:

cpp/OrderBook/orderbook.cpp(168) : error C2065: 'nullptr' : undeclared identifier 

Wie kann ich dies funktioniert?

+5

ich, das ist eine Microsoft-ish Fehlermeldung denke, und '-std = C++ 11' eine GNU-ish Kompilierung Option . –

+0

@FredLarson: Ich glaube nicht, ich bekomme diesen Fehler unter Linux. 'cythonize' ignoriert einfach' extra_compile_args'. Siehe auch [diese Antwort] (http://stackoverflow.com/a/33521863/1804173). – bluenote10

+0

@ bluenote10: [Fehler C2065'] (https://msdn.microsoft.com/en-us/library/ewcf0002.aspx) ist eine Visual Studio-Fehlermeldung. Ich wäre überrascht, es unter Linux zu sehen. –

Antwort

3

Versuchen Sie mit Extension: setup(ext_modules=cythonize([Extension(...)], ...).

Diese setup.py funktioniert für mich (auf Debian Linux):

from setuptools import setup, find_packages, Extension 
from Cython.Build import cythonize 
from glob import glob 

extensions = [ 
    Extension(
     'my_proj.cython.hello', 
     glob('my_proj/cython/*.pyx') 
     + glob('my_proj/cython/*.cxx'), 
     extra_compile_args=["-std=c++14"]) 
] 

setup(
    name='my-proj', 
    packages=find_packages(exclude=['doc', 'tests']), 
    ext_modules=cythonize(extensions)) 
+1

Das war das einzige, was für mich funktionierte! Danke! –