2014-12-04 24 views
7

Python ile bir C++ sınıfını sarar ve Cython modülü ile herhangi bir C++ 11 özelliğini derleyemiyorum.Cython C++ 11 komutlarını tanımıyor

Her şey, yalnızca C++ derlenirken tamamlanır. Benim .pyx dosya başlığında

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"] 
    )) 

: Aşağıda bu setup.py çalıştırdığınızda Ama

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

ben C++ 11 komutları tanımama onlarla yapmak zorunda hataların bir ton olsun 'auto' gibi.

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

Bunu nasıl işe alabilirim: Örneğin

?

+5

ve '-std = C++ 11' bir GNU-imsi derleme seçeneği . –

+0

@FredLarson: Sanmıyorum, Linux'ta bu hatayı alıyorum. 'cythonize', extra_compile_args'ı yok sayar. Ayrıca bkz. [Bu cevap] (http://stackoverflow.com/a/33521863/1804173). – bluenote10

+0

@ bluenote10: ['error C2065'] (https://msdn.microsoft.com/en-us/library/ewcf0002.aspx) bir Visual Studio hata iletisidir. Linux'ta görmek beni şaşırtacaktır. –

cevap

3

Extension kullanmayı deneyin: setup(ext_modules=cythonize([Extension(...)], ...).

(Debian Linux üzerinde) benim için bu setup.py çalışır:

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)) 
Bunun Microsoft-imsi hata mesajı yok düşünüyorum
+1

Bu benim için çalışan tek şeydi! Teşekkürler! –