Мои файлы setup.py и UserMethods.cpp находятся ниже.
Моя проблема заключается в следующем: я пытаюсь создать и установить пакет python, используя distutils
, и у меня возникают некоторые проблемы.
Когда я запускаю python3 setup.py install --user
, это не проблема.Он компилирует и создает каталог build/
с файлом с именем lib.linux-x86_64-3.6
.Когда я проверяю каталог .local/lib/python3.6/site-pacages
, появляется файл с именем UserMethods.cpython-36m-x86_64-linux-gnu.so
.
Проблема возникает, когда я пытаюсь импортировать пакет:
$ python3
>>> import UserMethods
, который возвращает следующую ошибку:
ImportError: ~/.local/lib/python3.6/site-packages/UserMethods.cpython-36m-x86_64-linux-gnu.so: undefined symbol: _ZN12NA62Analysis4Core18AnalyzerIdentifierD1Ev
Я не знаю, как и где такойСимвол будет определен или почему он будет создан.Кто-нибудь знает, откуда эта ошибка?Заранее спасибо.
РЕДАКТИРОВАТЬ: вот файл setup.py:
from distutils.core import setup, Extension
UM_module = Extension('UserMethods', sources=['UserMethodsModule.cpp'], language='C++',
include_dirs=[ ...many... ],
extra_compile_args=['-std=c++11'],
libraries=['stdc++'],)
setup(name='UserMethods',
version='1.0',
ext_modules=[UM_module],
)
, а вот мой файл UserMethods.cpp:
#include <Python.h>
#define PY_SSIZE_T_CLEAN
#include "UserMethods.hh"
/* OUR FUNCTIONS GO HERE */
static PyObject* UM_test(PyObject *self, PyObject *args){
const char *command;
int sts;
if ( !PyArg_ParseTuple(args, "s", &command) ){
return NULL;
}
sts = system(command);
return PyLong_FromLong(sts);
}
static PyMethodDef UserMethods[] = {
{"system", UM_test, METH_VARARGS, "execute shell command."},
{NULL, NULL, 0, NULL}
};
static struct PyModuleDef UserMethodsModule = {
PyModuleDef_HEAD_INIT,
"UserMethods",
NULL,
-1,
UserMethods
};
PyMODINIT_FUNC PyInit_UserMethods(void){
return PyModule_Create(&UserMethodsModule);
}