2015-04-28 8 views
0

Мне нужно скомпилировать мое расширение c, которое может быть вызвано python в kodi. Может кто-нибудь, пожалуйста, перечислите предпринятые шаги. Я думаю, что на самом деле я перекрестно скомпилировал расширение c, но он не будет работать с kodi.Перекрестная компиляция моего расширения cython для kodi/xbmc android

+0

Ненавижу попытку отладки этого вида дерьма :(... извините, не полезно, но я чувствую к вам :( –

+0

Спасибо, Джоран ... На самом деле мне нужно поместить зависимость моего .so-файла на libkodi. так что он найдет символы для python изнутри. Удивляясь, есть ли способ. – bir433

+0

хочу, чтобы я мог помочь, но единственный способ, которым я могу скомпилировать что-либо, - это следовать инструкциям elses и надеяться, что я получу их правильно: / –

ответ

0

Извините, что я не могу предоставить вам конкретные шаги, но из того, что я знаю, создание двоичных модулей для 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 - это полный беспорядок.

 Смежные вопросы

  • Нет связанных вопросов^_^