2014-12-04 5 views
7

मैं पाइथन के साथ एक सी ++ कक्षा लपेट रहा हूं, और मैं साइथन मॉड्यूल के साथ किसी भी सी ++ 11 सुविधाओं को संकलित नहीं कर सकता।साइथन सी ++ 11 कमांड को पहचान नहीं रहा

सबकुछ सी ++ को संकलित करते समय ठीक से संकलित करता है। लेकिन जब मैं नीचे इस setup.py चलाएँ: मेरी .pyx फ़ाइल शीर्षक में

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

:

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

मैं C++ 11 आदेशों को पहचानने नहीं उन लोगों के साथ क्या करना है कि त्रुटियों की एक टन मिल , 'ऑटो' की तरह।

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

मैं इस काम करने के लिए प्राप्त कर सकते हैं:

उदाहरण के लिए

?

+5

मुझे लगता है कि किसी Microsoft-ish त्रुटि संदेश नहीं है सोच रहा हूँ, और '-std = C++ 11' है एक जीएनयू-ish संकलन विकल्प । –

+0

@FredLarson: मुझे ऐसा नहीं लगता, मुझे यह त्रुटि लिनक्स पर मिल रही है। 'cythonize' बस' extra_compile_args' को अनदेखा करता है। यह भी देखें [यह उत्तर] (http://stackoverflow.com/a/33521863/1804173)। – bluenote10

+0

@ bluenote10: ['त्रुटि C2065'] (https://msdn.microsoft.com/en-us/library/ewcf0002.aspx) एक विजुअल स्टूडियो त्रुटि संदेश है। मैं इसे लिनक्स पर देखकर आश्चर्यचकित हूं। –

उत्तर

3

Extension: setup(ext_modules=cythonize([Extension(...)], ...) का उपयोग करने का प्रयास करें।

मेरे लिए यह काम करता है setup.py (डेबियन लिनक्स पर):

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

यह एकमात्र चीज थी जो मेरे लिए काम करती थी! धन्यवाद! –