我需要编译我的 c 扩展,该扩展可由 python 中的 kodi 调用。任何人都可以列出所涉及的步骤。我想我实际上已经交叉编译了 c 扩展,但它不适用于 kodi。
问问题
392 次
1 回答
0
抱歉,我无法为您提供具体步骤,但据我所知,为 Kodi-Android 构建二进制模块并非易事。这是我所知道的:
- 您需要
Python.h
使用用于 Kodi 内置解释器的 Python 源代码。 - 您需要链接
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 完全是一团糟。
于 2016-09-12T09:01:38.347 回答