Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 6, 2014 22:08:09

hound
Зарегистрирован: 2014-10-27
Сообщения: 41
Репутация: +  0  -
Профиль   Отправить e-mail  

Модуль на C (Си)

Добрый день, нашел статью где описывается создание модуля для пайтона на си:
http://blog2k.ru/archives/293#comment-3117

В общем, сделал как в статье, но когда импортирую полученный модуль самом пайтоне, то вываливается ошибка:
>>> import example
Traceback (most recent call last):
File “<stdin>”, line 1, in <module>
ImportError: /usr/local/lib/python3.4/dist-packages/example.cpython-34m.so: undefined symbol: PyString_FromString

Пробовал на версии пайтона 3.4.0(на убунте) и 3.2.3 (на дебиане)

Можете помочь?

Офлайн

#2 Ноя. 6, 2014 22:28:09

o7412369815963
От:
Зарегистрирован: 2009-06-17
Сообщения: 1986
Репутация: +  32  -
Профиль   Отправить e-mail  

Модуль на C (Си)

Можете попробовать этот пример, использовал его неделю назад на ubuntu 14.04 64bit + python 3.4
Только он без PyObject.

Офлайн

#3 Ноя. 7, 2014 08:15:41

kamisama
Зарегистрирован: 2014-07-08
Сообщения: 34
Репутация: +  4  -
Профиль   Отправить e-mail  

Модуль на C (Си)

Там api для 2-го. Нужно юникод создавать https://docs.python.org/3/c-api/unicode.html#creating-and-accessing-unicode-strings

Офлайн

#4 Ноя. 7, 2014 08:37:37

hound
Зарегистрирован: 2014-10-27
Сообщения: 41
Репутация: +  0  -
Профиль   Отправить e-mail  

Модуль на C (Си)

kamisama
Там api для 2-го. Нужно юникод создавать https://docs.python.org/3/c-api/unicode.html#creating-and-accessing-unicode-strings
Не много не понял…если не сложно можешь немного объяснить как подправить?

Офлайн

#5 Ноя. 7, 2014 11:07:00

kamisama
Зарегистрирован: 2014-07-08
Сообщения: 34
Репутация: +  4  -
Профиль   Отправить e-mail  

Модуль на C (Си)

#include <Python.h>
 
PyObject *hello( PyObject *self, PyObject *args, PyObject *kwargs)
{
    char *who;
    static char *keywords[] = {"who", NULL};
 
    if (!PyArg_ParseTupleAndKeywords(args, kwargs, "s", keywords, &who))
        return NULL;
    return PyUnicode_FromFormat("Hello, %s", who);
}
 
static PyMethodDef example_methods[] = 
{
    { "hello", (PyCFunction)hello, METH_VARARGS|METH_KEYWORDS, "hello(who) -- return \"Hello who\"" },
    { NULL, 0, 0, NULL }
};
static struct PyModuleDef example_module = {
   PyModuleDef_HEAD_INIT,
   "example",   /* name of module */
   NULL, /* module documentation, may be NULL */
   -1,       /* size of per-interpreter state of the module,
                or -1 if the module keeps state in global variables. */
   example_methods
};
 
PyMODINIT_FUNC
PyInit_example(void)
{
    return PyModule_Create(&example_module);
}
читай оф. документацию

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version