【问题标题】:Cross compiling my c python extension for kodi / xbmc android为 kodi / xbmc android 交叉编译我的 c python 扩展
【发布时间】:2016-09-12 18:03:20
【问题描述】:

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

【问题讨论】:

  • 我讨厌尝试调试这种废话:( ...抱歉没有帮助,但我对你有感觉:(
  • 谢谢 Joran... 实际上我需要将我的 .so 文件的依赖项放在 libkodi.so 上,以便它从那里找到 python 的符号。想知道有没有办法。
  • 希望我能提供帮助,但我可以编译任何东西的唯一方法是遵循别人的指示并希望我能把它们做对:/

标签: python xbmc python-c-extension kodi


【解决方案1】:

很抱歉,我无法为您提供具体步骤,但据我所知,为 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 完全是一团糟。

【讨论】:

    猜你喜欢
    • 2012-01-26
    • 2011-03-13
    • 2012-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多