2015-01-20 9 views
7

Aşağıdaki eğitici https://csl.name/post/c-functions-python/'u yeniden oluşturmaya çalışıyorum. .bu dosya görünüyor python setup.py install ile yürütmesini sonraImportError: dinamik modül, init işlevi tanımlamıyor

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

: Aşağıdaki setup.py kullanıyorum

#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); 
} 

: gibi C++ yılında

Benim Python uzantısı görünüyor doğru yerde ol.

Ama import extPy bu uzantıyı kullanmaya çalıştığınızda Hata alıyorum:

ImportError: Dinamik modül Burada ne eksik başlat işlevini

tanımlamıyor? Yardım için teşekkürler.

cevap

10

initextPy işlevi, C++ derleyicisine mangle the name neden olan bir C++ işlevi olduğundan tanınmıyor.

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

Bu iş yaptı:

Sen adı bozma inhibe extern "C" olarak işlev işaretlemesi gerekir. Teşekkür ederim. –

İlgili konular