36.6. dl-在共享库中调用 C 函数

从 2.6 版开始不推荐使用:Python 3 中已删除dl模块。请改用ctypes模块。

dl模块定义dlopen()函数的接口,该接口是 Unix 平台上用于处理动态链接库的最常用接口。它允许程序在这样的库中调用任意函数。

Warning

dl模块绕过 Python 类型系统和错误处理。如果使用不当,可能会导致分段错误,崩溃或其他不正确的行为。

Note

除非sizeof(int) == sizeof(long) == sizeof(char *),否则该模块将不起作用。如果不是这种情况,则将在导入时引发SystemError

dl模块定义以下Function:

返回值为dlobject

dl模块定义以下常量:

dl模块定义以下异常:

Example:

>>> import dl, time
>>> a=dl.open('/lib/libc.so.6')
>>> a.call('time'), time.time()
(929723914, 929723914.498)

该示例在 Debian GNU/Linux 系统上进行了try,并且很好地说明了使用此模块通常是一个不好的选择。

36.6.1. Dl 对象

如上面的open()返回的 Dl 对象具有以下方法:

>>> if a.sym('time'):
...     a.call('time')
... else:
...     time.time()

(请注意,此函数将返回非零数字,因为* NULL *指针为零)

最多必须有 10 个参数,未给出的参数将被视为None。该函数的返回值必须为 C long,这是一个 Python 整数。

首页