我可以使用ctypes从C中嵌入的python回调C函数吗?

我可以使用ctypes从C中嵌入的python回调C函数吗?,python,python-2.7,ctypes,python-extensions,Python,Python 2.7,Ctypes,Python Extensions,我有一个嵌入python代码的C程序。我已经从源代码处编译了python 2.7.2,并将我的程序与libpython2.7.a相链接 现在在我的python代码中,我希望从链接到我的C程序中的其他C库回调函数。我可以编写python扩展(请参阅中的扩展嵌入式python)。然而,ctypes将使这变得更容易,并允许我使用一些未归档的现有代码 ctypes旨在加载共享库,我想知道是否有办法将其“指向”我的静态程序代码 我无法将相关代码编译到共享库中,因为我的目标是iOS,苹果禁止使用AFAIK共

我有一个嵌入python代码的C程序。我已经从源代码处编译了python 2.7.2,并将我的程序与libpython2.7.a相链接

现在在我的python代码中,我希望从链接到我的C程序中的其他C库回调函数。我可以编写python扩展(请参阅中的扩展嵌入式python)。然而,ctypes将使这变得更容易,并允许我使用一些未归档的现有代码

ctypes旨在加载共享库,我想知道是否有办法将其“指向”我的静态程序代码


我无法将相关代码编译到共享库中,因为我的目标是iOS,苹果禁止使用AFAIK共享库。

通过Python代码,您可以为静态函数创建ctypes包装,如下所示:

restype = ctypes.c_int
argtypes = [ctypes.c_int, ctypes.c_double]        # or whatever
functype = ctypes.CFUNCTYPE(restype, *argtypes)
wrapper = functype(address_of_static_function_as_an_int)

当然,您可以从C代码中调用此(或类似)代码。

构造一个ctypes值(例如
ctypes.C\u void\u p
)封装函数指针并将其传递到Python代码中。

出于某种原因,这会使我的(静态)libffi在ctypes中崩溃。@Avner:老实说,我并没有实际尝试上述代码,所以我不能帮你解决这个问题。代码看起来是正确的(这就是为什么我接受了你的答案)。我怀疑问题在于将libffi移植到iOS以及我编译libpython.a(使用静态模块、静态类型和静态libffi)的方式。但由于我还没有解决这起坠机事件,目前这仍然是一个疑问。