有不同类型的.lib文件吗?

Are there different types of .lib files?

本文关键字:文件 lib 同类型      更新时间:2023-10-16

我已经使用Qt编译了一个最小的代码示例,并注意到链接到它的.lib文件增加了我的编译程序链接到相应的.dll文件的要求。

我想自己创建一个.lib用于我的其他项目之一,但希望这样做而不必同时创建一个.dll,以便它必须链接到。


从这个问题的答案:静态库和共享库的区别?

静态库是。a(或在Windows中。lib)文件。与库相关的所有代码都在这个文件中,并且在编译时直接链接到程序中。使用静态库的程序从静态库中获取所使用代码的副本,并使其成为程序的一部分。[Windows也有。lib文件用于引用。dll文件,但它们的行为方式与第一个相同].

我的理解是否正确,有两种类型的.lib文件:

  • 一种将其中的代码复制到已编译程序中的类型(不需要.dll链接)
  • 一种将对.dll文件的引用添加到编译程序中的类型

如果这个观察是正确的,如何编译这些类型之一的.lib ?

是的,在这个意义上,有两种类型的.lib文件。这是特定于Windows的(或者更确切地说,是特定于dll的)。

在Windows上,静态库是单个文件,通常扩展名为.lib。针对静态库的链接将存储在其中的代码(目标文件)复制到可执行文件中。这相当于Unix世界的.a文件。

另一方面,一个DLL(一个共享库)有两个部分:包含代码的动态加载库本身(.dll)和一个导入库 (.lib),它包含满足链接器依赖的"存根代码"。您链接到一个导入库(DLL附带的.lib文件),其中包括DLL函数的"存根代码",并且还将您的可执行文件标记为需要在启动时加载DLL。

在Visual Studio中,您可以为每个项目选择项目类型:静态库(将生成.lib文件)或动态库(将生成.dll文件及其相应的.lib文件)。

在Unix世界中,这是不同的工作方式:在链接期间使用共享库(扩展名.so),并创建加载器依赖。