交叉编译我的c python扩展为kodi / xbmc android

时间:2015-04-28 18:20:30

标签: python xbmc python-c-extension kodi

我需要编译我的c扩展,可以在kodi中通过python调用。任何人都可以列出所涉及的步骤。我想我实际上已经交叉编译了c扩展,但它不适用于kodi。

1 个答案:

答案 0 :(得分:0)

很抱歉,我无法为您提供具体步骤,但据我所知,为Kodi-Android构建二进制模块并非易事。这就是我所知道的:

  • 您需要使用用于Kodi内置解释器的Python源代码中的Python.h
  • 您需要链接libkodi.so以找到必要的Python符号。
  • 这很重要: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来说这是强制性的)但是如果您的库没有外部依赖关系,那么通过ctypes使用共享库会更容易。

UPD :我忘记了许可问题。 Android不允许从任何地方导入二进制模块。已知Kodi的临时目录可以工作,但并非总是如此。同样,就二进制Python模块而言,Kodi-Android总是一团糟。