Мне нужно скомпилировать мое расширение c, которое может быть вызвано python в kodi. Может кто-нибудь, пожалуйста, перечислите предпринятые шаги. Я думаю, что на самом деле я перекрестно скомпилировал расширение c, но он не будет работать с kodi.Перекрестная компиляция моего расширения cython для kodi/xbmc android
ответ
Извините, что я не могу предоставить вам конкретные шаги, но из того, что я знаю, создание двоичных модулей для Kodi-Android - это не тривиальная задача. Вот что я знаю:
- Вы должны использовать
Python.h
из источников Python, используемых для встроенного интерпретатора Коди в. - Чтобы найти необходимые символы Python, вам необходимо установить ссылку на
libkodi.so
. - Это важно: механизм импорта для двоичных конкреций в Kodi-Android нарушен.
Если вы используете:
import foo
Kodi-Android будет на самом деле искать libfoo.so
, потому что он автоматически добавляет lib-
, когда поиск общих файлов библиотек и ваш импорт не удастся. Простое переименование foo.so
в libfoo.so
не поможет, потому что имя должно соответствовать декларациям модуля, например:
PyMODINIT_FUNC
initspam(void)
{
(void) Py_InitModule("libfoo", SpamMethods);
}
Только если декларация модуля "libfoo"
соответствует имени файла libfoo.so
(«lib-» часть является обязательной для Kodi-Android), то импорт должен быть успешным, если нет другой ошибки. Как я уже сказал, это не тривиальная задача.
Кстати, вы можете создать чистую общую библиотеку C и использовать ctypes и не испортить все эти сломанные модули Python-C. Естественно, имя вашей библиотеки должно начинаться с «lib-» (опять же, это обязательно для Kodi-Android), но использование общих libs через ctypes проще, если ваша библиотека не имеет внешних зависимостей.
UPD: Я забыл о проблемах с разрешением. Android не позволяет импортировать двоичные модули со всего мира. Известно, что временный каталог Kodi работает, но не всегда. Опять же, что касается бинарных модулей Python, Kodi-Android - это полный беспорядок.
Ненавижу попытку отладки этого вида дерьма :(... извините, не полезно, но я чувствую к вам :( –
Спасибо, Джоран ... На самом деле мне нужно поместить зависимость моего .so-файла на libkodi. так что он найдет символы для python изнутри. Удивляясь, есть ли способ. – bir433
хочу, чтобы я мог помочь, но единственный способ, которым я могу скомпилировать что-либо, - это следовать инструкциям elses и надеяться, что я получу их правильно: / –