Visual Studio 中的静态库和动态链接库 (DLL)

4

我已经在我的电脑上用dll和.lib文件构建了VTK。当我想创建一个使用VTK的项目时,我需要在项目属性中包含头文件并链接.lib文件。此外,我还必须将.dll文件添加到项目路径中。我有几个问题:

  1. .libs和.dll文件之间有什么区别?
  2. 是否可能只使用.dll或.lib文件创建项目。(我可以链接.lib文件而不添加dlls到路径或添加dlls到路径而不链接.lib文件)?

如果能够得到任何解释,我将不胜感激。谢谢。


1
你已经将VTK构建为DLL项目。DLL包含可执行代码(和数据),而LIB仅包含来自DLL的导出的地址修复。如果没有LIB,您需要手动加载DLL并手动修复调用它的内容。 - Richard Critten
1
相关链接:https://dev59.com/xGw05IYBdhLWcg3wrDpS#7096229 - Matteo Italia
2个回答

11
  1. .lib文件用于链接器解析导入项。.dll文件包含在运行时动态加载的代码。

  2. 如果您有一个静态库,它包含了所有所需的代码,没有.dll文件。如果您有一个.dll文件,则还需要相应的.lib文件以正确链接。


如果我可以在没有dll文件的情况下使用.lib文件,那么为什么当我不将其包含在路径中时,项目会生成“vtkxxxx.dll在您的计算机上丢失”的消息?我有vtkxxxx.dll和vtkxxxx.lib两个文件。如何更改项目设置以仅包括.lib文件? - Madz
你需要创建一个静态库,将所有代码都放在.lib文件中。这样一来,所有内容都会被链接到你的.exe文件中,你只需要使用那个文件即可。 - Bo Persson
我明白了。所以如果当前的.libs需要dlls,那么它们就不能作为静态库运行。所以如果我不想将dlls添加到项目路径中,我需要重新创建lib文件? - Madz
感谢您的澄清。 - Madz

5

.lib文件仅在编译期间由连接器使用。而.dll文件在执行期间由编译后的exe文件使用。换句话说,当你编译程序之后,就不再需要.lib文件了。在打包软件以进行分发时,您只需使用.exe、.dll和未打包到您的exe中的任何资源即可。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接