python: ImportError: dynamic module does not define module export function
python: ImportError: dynamic module does not define module export function
我正在尝试安装我用 c 编写的函数(with python3 setup.py install)但是 python raise ImportError: 动态模块没有定义模块导出函数(PyInit_costFunction)
错误!
costFunction.c:
static PyObject *costFunction(PyObject *self, PyObject *args)
{
return Py_BuildValue("d", 0); // or anything!
}
static PyMethodDef costFunction_methods[] = {
{"costFunction", (PyCFunction)costFunction, METH_VARARGS, "cost function"},
{NULL, NULL, 0, NULL}
};
static struct PyModuleDef costFunctionmodule = {
PyModuleDef_HEAD_INIT,"costFunction", NULL, -1, costFunction_methods
};
PyMODINIT_FUNC PyInit_costFunction(void)
{
return PyModule_Create(&costFunctionmodule);
}
setup.py:
from distutils.core import setup, Extension
setup(name='costFunction', version='1.0', \
ext_modules=[Extension('costFunction', ['costFunction.c'],include_dirs=['include'])])
外部图书馆:tinyexpr
我正在使用 linux mint 18 和 python 3.5.2
编辑:
python3-开发版本是3.5.1-3
我终于用上了卑鄙的把戏!
编译的 C 代码(没有 python.h 和 C 中的任何 python 数据类型)具有:
gcc -fPIC -Wall -O3 costFunction.c -o costFunction.so -shared -fopenmp
并使用 python ctypes 模块来加载和使用它:
dll = ctypes.CDLL("./costFunction.so")
costFunction = dll.cost_function
costFunction.restype = ctypes.c_double
costFunction.argtypes = [ctypes.POINTER(ctypes.c_double), ctypes.c_int]
我正在尝试安装我用 c 编写的函数(with python3 setup.py install)但是 python raise ImportError: 动态模块没有定义模块导出函数(PyInit_costFunction) 错误!
costFunction.c:
static PyObject *costFunction(PyObject *self, PyObject *args)
{
return Py_BuildValue("d", 0); // or anything!
}
static PyMethodDef costFunction_methods[] = {
{"costFunction", (PyCFunction)costFunction, METH_VARARGS, "cost function"},
{NULL, NULL, 0, NULL}
};
static struct PyModuleDef costFunctionmodule = {
PyModuleDef_HEAD_INIT,"costFunction", NULL, -1, costFunction_methods
};
PyMODINIT_FUNC PyInit_costFunction(void)
{
return PyModule_Create(&costFunctionmodule);
}
setup.py:
from distutils.core import setup, Extension
setup(name='costFunction', version='1.0', \
ext_modules=[Extension('costFunction', ['costFunction.c'],include_dirs=['include'])])
外部图书馆:tinyexpr
我正在使用 linux mint 18 和 python 3.5.2
编辑: python3-开发版本是3.5.1-3
我终于用上了卑鄙的把戏!
编译的 C 代码(没有 python.h 和 C 中的任何 python 数据类型)具有:
gcc -fPIC -Wall -O3 costFunction.c -o costFunction.so -shared -fopenmp
并使用 python ctypes 模块来加载和使用它:
dll = ctypes.CDLL("./costFunction.so")
costFunction = dll.cost_function
costFunction.restype = ctypes.c_double
costFunction.argtypes = [ctypes.POINTER(ctypes.c_double), ctypes.c_int]