将静态库 (.lib) 加入 Python 项目

9 投票
4 回答
10988 浏览
提问于 2025-04-16 03:51

能不能像导入 .dll 文件那样,把 .lib 库里的模块导入到 Python 程序里呢?

4 个回答

0

你手里有一个静态库,还是说你有一个 .lib 文件,并且认为它就是静态库?在Windows系统中,.lib 文件可以是导入库(import library)或者静态库(static library)。导入库是和同名的 dll 文件一起生成的,比如 kernel32.dll 和 kernel32.lib。导入库在链接时用来填充可执行文件的导入地址表。而静态库则包含一些代码,这些代码会在链接时被复制到可执行文件中。

如果你有编译器的使用权限,另一个选择是创建一个扩展模块,利用这个静态库。想了解更多细节,可以查看 Python 文档

2

很遗憾,不可以。动态链接库是运行时加载所必需的。

4

理论上是可以的;但在实际操作中,可能不太行,而且绝对没有DLL那么简单。静态库其实就是一堆目标文件的集合,需要一个完整的链接器来正确处理里面的所有引用。你可以尝试把静态库的内容链接起来,形成一个共享库,但这需要静态库是以位置无关代码(PIC)构建的,这一点并不一定能保证。理论上,链接器在链接库时所做的工作也可以在运行时完成,但实际上并没有现成的代码可以做到这一点。你最好的选择可能是找到这个库的源代码或者一个共享版本。

撰写回答