2015-01-20 7 views
7

मैं निम्नलिखित ट्यूटोरियल https://csl.name/post/c-functions-python/ को पुन: उत्पन्न करने का प्रयास कर रहा हूं।आयात त्रुटि: गतिशील मॉड्यूल init फ़ंक्शन को परिभाषित नहीं करता

सी ++ में

मेरे अजगर विस्तार लगता है:

#include <Python.h> 

static PyObject* py_myFunction(PyObject* self, PyObject* args) 
{ 
    char *s = "Hello from C!"; 
    return Py_BuildValue("s", s); 
} 

static PyObject* py_myOtherFunction(PyObject* self, PyObject* args) 
{ 
    double x, y; 
    PyArg_ParseTuple(args, "dd", &x, &y); 
    return Py_BuildValue("d", x*y); 
} 

static PyMethodDef extPy_methods[] = { 
    {"myFunction", py_myFunction, METH_VARARGS}, 
    {"myOtherFunction", py_myOtherFunction, METH_VARARGS}, 
    {NULL, NULL} 
}; 

void initextPy(void) 
{ 
    (void) Py_InitModule("extPy", extPy_methods); 
} 

मैं निम्नलिखित setup.py उपयोग कर रहा हूँ:

from distutils.core import setup, Extension 
setup(name='extPy', version='1.0', \ 
ext_modules=[Extension('extPy', ['extPy.cpp'])]) 

python setup.py install के साथ लागू करने के बाद .so फाइल करने के लिए लगता है सही जगह पर रहो।

लेकिन जब मैं import extPy के साथ इस एक्सटेंशन का उपयोग करने की कोशिश मैं त्रुटि मिलती है:

ImportError: गतिशील मॉड्यूल init समारोह

मैं यहाँ क्या याद आ रही है परिभाषित नहीं करता है? मदद के लिए धन्यवाद।

उत्तर

10

क्योंकि फ़ंक्शन initextPy एक सी ++ फ़ंक्शन है जो C++ कंपाइलर को mangle the name का कारण बनता है, इसलिए यह पहचानने योग्य नहीं है।

extern "C" void initextPy(void) 
{ 
    ... 
} 
+0

यह काम किया है:

आप नाम mangling को बाधित करने के extern "C" के रूप में समारोह को चिह्नित करने की जरूरत है। धन्यवाद। –

संबंधित मुद्दे

 संबंधित मुद्दे