0

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

4

1 回答 1

0

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

  • 您需要Python.h使用用于 Kodi 内置解释器的 Python 源代码。
  • 您需要链接libkodi.so以找到必要的 Python 符号。
  • 这很重要:Kodi-Android 中二进制结节的导入机制已损坏。

如果您使用:

import foo

Kodi-Android 实际上会搜索,libfoo.so因为它会lib-在搜索共享库文件时自动附加,并且您的导入将失败。简单的重命名foo.solibfoo.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 完全是一团糟。

于 2016-09-12T09:01:38.347 回答