С Новым годом! Форум программистов, компьютерный форум, киберфорум
Python
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
4 / 4 / 3
Регистрация: 26.11.2014
Сообщений: 89
1

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

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

Author24 — интернет-сервис помощи студентам
Для использования файла 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
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
05.01.2016, 13:53
Ответы с готовыми решениями:

Конвертировать файл Excel в Python
После загрузки отчета с сайта получается файл с расширением xls. По умолчанию файл открывается...

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

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

Конвертировать команду для FFmpeg-Python
Здравствуйте, использую компонент FFmpeg-Python https://github.com/kkroening/ffmpeg-python не...

Ajax-ом обработать загружаемый файл
На странице использую загрузку csv-файла email адресов, далее нужно по нажатию кнопки без...

6
298 / 256 / 57
Регистрация: 11.06.2012
Сообщений: 1,557
05.01.2016, 15:23 2
нет необходимого заголовочного файла. Как исправить - либо указать правильный путь (маловероятно), либо установить необходимую библиотеку (скорее всего ваш случай) - sudo apt-get install python3.4-dev
0
4 / 4 / 3
Регистрация: 26.11.2014
Сообщений: 89
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
21 / 34 / 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
4 / 4 / 3
Регистрация: 26.11.2014
Сообщений: 89
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
840 / 478 / 58
Регистрация: 18.09.2012
Сообщений: 1,688
14.01.2016, 01:43 6
persej, вообще говоря может быть вы знаете, есть ctypes, ffi и cython. Может быть вам такое облегчит жизнь...
0
4 / 4 / 3
Регистрация: 26.11.2014
Сообщений: 89
14.01.2016, 05:55  [ТС] 7
Такие "простые" действия именно для обучения азов компилирования. Чтобы прочувствовать так сказать механику.
0
14.01.2016, 05:55
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
14.01.2016, 05:55
Помогаю со студенческими работами здесь

В IE сохранить загружаемый файл в папку Downloads и закрыть браузер
Добрый день, прошу помощи. Задача, которую изначально пытаюсь реализовать БЕЗ подключения...

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

Загружаемый через форму pdf файл не сохраняется в базе данных
Здравствуйте! Помогите пожалуйста с проблемой. Имеется следующая модель: models.py: class...

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

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


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Как написать микросервис на Go/Golang
InfoMaster 14.01.2025
Определение микросервиса, преимущества использования Go/ Golang Микросервис – это архитектурный подход к разработке программного обеспечения, при котором приложение состоит из небольших, независимо. . .
Как написать микросервис с нуля на C#
InfoMaster 14.01.2025
В современном мире разработки программного обеспечения микросервисная архитектура стала стандартом де-факто для создания масштабируемых и гибких приложений. Этот архитектурный подход предполагает. . .
Как создать интернет-магазин на PHP и JavaScript
InfoMaster 14.01.2025
В современном мире электронная коммерция стала неотъемлемой частью бизнеса. Создание собственного интернет-магазина открывает широкие возможности для предпринимателей, позволяя достичь большей. . .
Как написать Тетрис на Ассемблере
InfoMaster 14.01.2025
Тетрис – одна из самых узнаваемых и популярных компьютерных игр, созданная в 1984 году советским программистом Алексеем Пажитновым. За прошедшие десятилетия она завоевала симпатии миллионы людей по. . .
Как создать игру "Танчики" на Unity3d и C#
InfoMaster 14.01.2025
Разработка игр – это увлекательный процесс, сочетающий в себе творчество и технические навыки. В этой статье мы рассмотрим создание классической игры "Танчики" с использованием Unity3D и языка. . .
Организую платный онлайн микро-курс по доработке Android-клиента Telegram
_Ivana 14.01.2025
Официальная версия и распространенные форки не полностью устраивают? Сделай свою кастомную версию клиента! 4 занятия по 2 часа (2 недели пн, ср 19:00-21:00 по Москве). Первое вводное занятие. . .
Как создать приложение для фитнеса для iOS/iPhone на Kotlin
InfoMaster 14.01.2025
Создание собственного фитнес-приложения — это не только захватывающий, но и полезный процесс, ведь оно может стать вашим верным помощником на пути к здоровому и активному образу жизни. В современных. . .
Как создать приложение магазина для iOS/iPhone на Swift
InfoMaster 14.01.2025
Введение в разработку iOS-приложений Разработка приложений для iPhone и других устройств на базе iOS открывает огромные возможности для создания инновационных мобильных решений. В данной статье мы. . .
Это работает. Скорость асинхронной логики велика. Вопрос видимо останется в стабильности. Плата - огонь!
Hrethgir 13.01.2025
По прошлому проекту в Logisim Evolution https:/ / www. cyberforum. ru/ blogs/ 223907/ blog8781. html прилагаю файл архива проекта в Gowin Eda. Восьмибитный счётчик из сумматора+ генератор сигнала. . .
UserScript для подсветки кнопок языков программировани­­­­я в зависимости от текущего раздела
volvo 13.01.2025
В результате работы этого скрипта подсвечиваются нужные кнопки не только в форме быстрого ответа, но и при редактировании сообщения: / / ==UserScript== / / @name CF_DefaultLangSelect / / . . .
Введение в модели и алгоритмы машинного обучения
InfoMaster 12.01.2025
Машинное обучение представляет собой одну из наиболее динамично развивающихся областей искусственного интеллекта, которая фокусируется на разработке алгоритмов и методов, позволяющих компьютерам. . .
Как на Python создать нейросеть для решения задач
InfoMaster 12.01.2025
В контексте стремительного развития современных технологий особое внимание уделяется таким инструментам, как нейросети. Эти структуры, вдохновленные биологическими нейронными сетями, используются для. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru