有不同类型的.lib文件吗?
Are there different types of .lib files?
我已经使用Qt编译了一个最小的代码示例,并注意到链接到它的.lib
文件增加了我的编译程序链接到相应的.dll
文件的要求。
我想自己创建一个.lib
用于我的其他项目之一,但希望这样做而不必同时创建一个.dll
,以便它必须链接到。
从这个问题的答案:静态库和共享库的区别?
静态库是。a(或在Windows中。lib)文件。与库相关的所有代码都在这个文件中,并且在编译时直接链接到程序中。使用静态库的程序从静态库中获取所使用代码的副本,并使其成为程序的一部分。[Windows也有。lib文件用于引用。dll文件,但它们的行为方式与第一个相同].
我的理解是否正确,有两种类型的.lib
文件:
- 一种将其中的代码复制到已编译程序中的类型(不需要
.dll
链接) - 一种将对
.dll
文件的引用添加到编译程序中的类型
如果这个观察是正确的,如何编译这些类型之一的.lib
?
是的,在这个意义上,有两种类型的.lib
文件。这是特定于Windows的(或者更确切地说,是特定于dll的)。
在Windows上,静态库是单个文件,通常扩展名为.lib
。针对静态库的链接将存储在其中的代码(目标文件)复制到可执行文件中。这相当于Unix世界的.a
文件。
.dll
)和一个导入库 (.lib
),它包含满足链接器依赖的"存根代码"。您链接到一个导入库(DLL附带的.lib
文件),其中包括DLL函数的"存根代码",并且还将您的可执行文件标记为需要在启动时加载DLL。
在Visual Studio中,您可以为每个项目选择项目类型:静态库(将生成.lib
文件)或动态库(将生成.dll
文件及其相应的.lib
文件)。
在Unix世界中,这是不同的工作方式:在链接期间使用共享库(扩展名.so
),并创建加载器依赖。
相关文章:
- 如何指定我希望我的LIB链接到的DLL文件?-Visual Studio 2019
- CMake 生成的 MSVC 项目找不到符号,即使为其相关 dll 正确生成了 lib 文件也是如此
- 从 .lib 文件创建一个.dll文件
- 看不到文件'SDL2.lib'
- 可执行文件C++包括.obj,.lib和.dll吗?
- 我应该安装 .cmake 文件来共享/cmake 还是 lib/cmake?
- 链接:致命错误LNK1104:无法打开文件"python37_d.lib"
- 在 Windows 10 下使用 GTest 的 CMake - 致命错误 LNK1104:无法打开文件"gtest.lib",但存在调试"gtestd.lib"
- 链接器找不到导入的 DLL 的 LIB 文件
- LNK1104无法打开文件"legacy_stdio_definitions.lib"
- 有没有适用于Windows.lib文件的GNU二进制文件描述符(BFD)
- 在Qt中链接具有非标准名称的lib文件
- bitbake-grpc交叉编译/配置失败,错误为c-ares::care引用文件/usr/lib/libcares.s
- C++-在没有自定义.lib文件的情况下从Lua C模块调用Lua函数
- LNK 1104 无法打开文件 'glfw3.lib
- 是否可以将 EXE 文件作为 lib 文件链接到另一个项目?
- C++ CLR dll 需要 .lib 文件,但非 CLR 不需要
- G++ 无法链接 curl lib 文件
- 开放式阅读WAV文件lib
- LNK1104无法打开文件'...lib.obj'