【问题标题】:How python standrad lib invoke C or C++?python标准库如何调用C或C++?
【发布时间】:2015-10-08 10:49:32
【问题描述】:

cpython "time.py" 中的函数几乎只是“通过”定义。我猜它的功能实现在"lib/python2.7/lib-dynload/time.so",所以我想知道cpython解释器是如何调用".so"文件的?我知道 ctypes,但我找不到 cpython 中的“时间”模块在哪里使用它。

【问题讨论】:

    标签: python c interpreter cpython


    【解决方案1】:

    简短的回答是 Python 为 C 程序提供了一个 API(Python / C API),它允许在 C 代码中定义/实例化 Python 对象,包括函数(请参阅extending Python with C)。有一种称为Py_InitModule(及其变体)的方法,它可以在 C 代码中实例化 Python 模块并注册方法定义和设置/添加字段。

    就 Python 如何加载“time.so”而言,它可能使用 dlopen C 函数来加载,该函数允许库在运行时动态打开(或者,在 Windows 上,等效的 LoadLibrary)。使用这种方法,可以检索具有特定名称的函数(例如,Python 可以强制任何实现 Python 模块的“.so”文件必须提供具有特殊签名的初始化函数)然后调用它,允许初始化函数来注册各种定义。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-03-15
      • 2010-09-23
      • 2011-05-26
      • 1970-01-01
      • 2011-03-10
      • 2022-09-26
      • 2012-10-22
      • 2015-09-04
      相关资源
      最近更新 更多