跳转到主要内容

未提供项目描述

项目描述

GitHub

dlsym – 一个跨平台的符号定位器

dlsym 允许 Python C 扩展模块使用已经加载的 C 库中存在的符号,而无需实际链接这些库。作为一个简单的例子,使用 pybind11

double (* my_atan2)(double, double);
my_atan2 = reinterpret_cast<decltype(my_atan2)>(
    py::module::import("dlsym").attr("dlsym")("atan2").cast<uintptr_t>());

显然,链接到 libm 来获取对 atan2 的访问并不特别困难,但这种方法还允许使用例如在导入 numpy 后可用的 numpy 提供的 BLAS/LAPACK 函数(无论底层实现是 OpenBLAS、MKL 还是其他什么),在导入 pyfftw 后使用 fftw 函数,或在导入 tkinter 后使用 Tcl/Tk 函数(请参阅测试示例)。

主要目标是简化在 C 库默认不存在的机器上编译此类扩展模块的过程,但可以通过在相应的 Python 包中声明 install_requires 来“请求”这些库。

请注意,共享库的路径实际上并没有作为参数传递给 dlsym(与 POSIX 的 dlsym(3) 不同)。这是因为 Windows 上的符号搜索必须枚举所有已加载的模块,因为无法传递一个通过传递加载符号的模块。在 POSIX 上,因此我们为了保持一致性而遵循相同的策略(但枚举 sys.modules 中的所有扩展模块)。

符号实际定义的库的路径以 INFO 级别记录。

我从Matthew Brett的原始实现中学习了加载tkintermatplotlib的技巧。

项目详情


下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源分发

dlsym-0.1.tar.gz (6.9 kB 查看散列值)

上传时间:

由以下支持