Форум программистов, компьютерный форум, киберфорум
Наши страницы
Python
Войти
Регистрация
Восстановить пароль
 
persej
3 / 3 / 3
Регистрация: 26.11.2014
Сообщений: 83
1

Конвертировать из языка С в .so (динамические загружаемый объектный файл) для python

05.01.2016, 13:53. Просмотров 343. Ответов 6
Метки нет (Все метки)

Для использования файла C в сценарии Python надо скомпилировать его в динамически
загружаемый объектный файл (например, hello.so в Linux ) с помощью make-файла.

Но выскакивает ошибка:

Код
alexey@alexey-N102 ~/PP4E-Examples-1.4/Examples/PP4E/Integrate/Extend/Hello $ make -f makefile.hello
gcc hello.c -g -I/usr/local/include/python3.1 -shared -L/usr/bin/python3.4 -lpython3.4 -o hello.so
hello.c:6:43: fatal error: /usr/include/python3.4/Python.h: No such file or directory
 #include </usr/include/python3.4/Python.h>
                                           ^
compilation terminated.
make: *** [hello.so] Error 1
alexey@alexey-N102 ~/PP4E-Examples-1.4/Examples/PP4E/Integrate/Extend/Hello $
Что не так в кодах?



файл makefile.hello
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
#############################################################
# Compile hello.c into a shareable object file on Cygwin,
# to be loaded dynamically when first imported by Python.
#############################################################
 
PYLIB = /usr/bin/python3.4
PYINC = /usr/local/include/python3.1
 
hello.so: hello.c
    gcc hello.c -g -I$(PYINC) -shared -L$(PYLIB) -lpython3.4 -o hello.so
 
clean:
    rm -f hello.so core
файл hello.c

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
/********************************************************************
 * A simple C extension module for Python, called "hello"; compile
 * this into a ".so" on python path, import and call hello.message;
 ********************************************************************/
 
#include </usr/include/python3.4/Python.h>
#include <string.h>
 
/* module functions */
static PyObject *                                 /* returns object */
message(PyObject *self, PyObject *args)           /* self unused in modules */
{                                                 /* args from Python call */
    char *fromPython, result[1024];
    if (! PyArg_Parse(args, "(s)", &fromPython))  /* convert Python -> C */
        return NULL;                              /* null=raise exception */
    else {
        strcpy(result, "Hello, ");                /* build up C string */
        strcat(result, fromPython);               /* add passed Python string */
        return Py_BuildValue("s", result);        /* convert C -> Python */
    }
}
 
/* registration table  */
static PyMethodDef hello_methods[] = {
    {"message",  message, METH_VARARGS, "func doc"},    /* name, &func, fmt, doc */
    {NULL, NULL, 0, NULL}                               /* end of table marker */
};
 
/* module definition structure */
static struct PyModuleDef hellomodule = {
   PyModuleDef_HEAD_INIT,
   "hello",         /* name of module */
   "mod doc",       /* module documentation, may be NULL */
   -1,              /* size of per-interpreter module state, -1=in global vars */
   hello_methods    /* link to methods table */
};
 
/* module initializer */
PyMODINIT_FUNC
PyInit_hello()                         /* called on first import */
{                                      /* name matters if loaded dynamically */
    return PyModule_Create(&hellomodule);
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.01.2016, 13:53
Ответы с готовыми решениями:

Как конвертировать Python файл в exe?
Конвертировал через pyinstallers, но когда запускаешь exe файл то он на секунду...

загружаемый pdf файл
Я уже давно на многих сайтах стал замечать , что pdf документы перестали давать...

Как можно проверить, загружаемый пользователем файл, на вирус?
Я хочу сделать возможность загрузки файлов на сайт, и хотелось бы узнать, можно...

Объектный файл
День добрый, подскажите пожалуйста, где можно почитать про структуру объектных...

Объектный файл
Только что начал изучать Assembler и сразу же столкнулся с проблемой: не...

6
Zuzik
294 / 251 / 57
Регистрация: 11.06.2012
Сообщений: 1,557
05.01.2016, 15:23 2
нет необходимого заголовочного файла. Как исправить - либо указать правильный путь (маловероятно), либо установить необходимую библиотеку (скорее всего ваш случай) - sudo apt-get install python3.4-dev
0
persej
3 / 3 / 3
Регистрация: 26.11.2014
Сообщений: 83
05.01.2016, 17:46  [ТС] 3
Zuzik, сделал как говорили (sudo apt-get install python3.4-dev). Но по прежнему выскакивает ошибка (вернул значение #include </usr/include/python3.4/Python.h> как было раньше #include <Python.h> в hello.s, при старом значении #include </usr/include/python3.4/Python.h> выскакивает другая ошибка)

Код
alexey@alexey-N102 ~/PP4E-Examples-1.4/Examples/PP4E/Integrate/Extend/Hello $ make -f makefile.hello
gcc hello.c -g -I/usr/local/include/python3.1 -shared -L/usr/include/python3.4 -lpython3.4 -o hello.so
hello.c:6:20: fatal error: Python.h: No such file or directory
 #include <Python.h>
                    ^
compilation terminated.
make: *** [hello.so] Error 1
0
ivlevdenis
20 / 33 / 14
Регистрация: 23.07.2014
Сообщений: 148
09.01.2016, 10:30 4
gcc hello.c -g -I/usr/local/include/python3.1 -shared -L/usr/include/python3.4 -lpython3.4 -o hello.so
0
persej
3 / 3 / 3
Регистрация: 26.11.2014
Сообщений: 83
13.01.2016, 09:58  [ТС] 5
Подправил makefile.hello:
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
#############################################################
# Compile hello.c into a shareable object file on Cygwin,
# to be loaded dynamically when first imported by Python.
#############################################################
 
PYLIB = /usr/include/python3.4
PYINC = /usr/include/python3.4m
 
hello.so: hello.c
    gcc hello.c -g -I$(PYINC) -shared -L$(PYLIB)  -o hello.so
 
clean:
    rm -f hello.so core

Python.h нашел после поиска в каталоге /usr/include/python3.4m. После запуска makefile.hello не выскакивала ошибка Python.h.
Но выскакивала ошибка не найден -lpython3.1.
Просто удалил это слово в makefile.hello.
После запуска makefile.hello получился файл hello.so который импортируется в Питон и работает как положено.

Bash
1
2
3
4
5
6
7
8
9
10
11
12
persej@persej-S3420GP ~/PP4E-Examples-1.4/Examples/PP4E/Integrate/Extend/Hello $ make -f makefile.hello
gcc hello.c -g -I/usr/include/python3.4m -shared -L/usr/include/python3.4  -o hello.so
persej@persej-S3420GP ~/PP4E-Examples-1.4/Examples/PP4E/Integrate/Extend/Hello $ python3
Python 3.4.3 (default, Oct 14 2015, 20:33:09) 
[GCC 4.8.4] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import hello
>>> hello.message('world')
'Hello, world'
>>> hello.message('extending')
'Hello, extending'
>>>
0
Wolkodav
609 / 462 / 58
Регистрация: 18.09.2012
Сообщений: 1,688
14.01.2016, 01:43 6
persej, вообще говоря может быть вы знаете, есть ctypes, ffi и cython. Может быть вам такое облегчит жизнь...
0
persej
3 / 3 / 3
Регистрация: 26.11.2014
Сообщений: 83
14.01.2016, 05:55  [ТС] 7
Такие "простые" действия именно для обучения азов компилирования. Чтобы прочувствовать так сказать механику.
0
14.01.2016, 05:55
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.01.2016, 05:55

Не создаётся объектный файл
Необходимо создать объектный файл вот код: #include &lt;stdio.h&gt; //#include...

Как создать объектный файл
Как создать объектный файл если начало такое D:\masm32\topgun.exe...

не создается объектный файл в TASM
ЗАДАНИЕ: Имеется система трех уравнений и следующие данные: -строка...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru