未提供项目描述
项目描述
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的原始实现中学习了加载tkinter到matplotlib的技巧。
项目详情
关闭
dlsym-0.1.tar.gz的散列值
算法 | 散列摘要 | |
---|---|---|
SHA256 | 48a22c6a2318321b414130e86554c96728fc40a9bbd2bb9a6561e3a0d9a494e8 |
|
MD5 | 40b058eea690727f99c57a8c64e808bf |
|
BLAKE2b-256 | cb4e32be84f272ab2e58c8fd12d0cc80bc329fb39e304144a5a7af51da2f26fe |