何时包含.lib以及何时包含.dll或两者

时间:2010-01-26 10:21:34

标签: dll visual-studio-2005 linker

我从硬件供应商处获得了一个.h文件,两个.lib文件,一个.dll文件和一个小型测试项目,以便与他们的硬件进行通信。

编译并运行他们的测试项目工作得很好。值得注意的是:他们不使用.dll。我可以抛弃dll目录及其所有内容,一切正常。

为了开始,我只需将代码的通信部分(连接,断开连接并发送命令)复制到我的项目中。这实际上就是你所能做的一切。我已经包含.h文件并指向包含.lib文件的目录。就像在微小的测试项目中一样。这一切都编译,但当我尝试运行该项目时,它抱怨它缺少.dll文件。

有人可以解释发生了什么吗? libs和dll应该如何工作?

所有这些都在Windows上,VS2005。我比较了.vcproj文件,找不到任何显着的差异。

2 个答案:

答案 0 :(得分:2)

基本上答案取决于您是否要为可执行文件使用静态或动态链接。

使用静态链接,您需要.h和.lib文件,但不需要.dll文件进行编译和链接。您的可执行文件会更大,但在运行时不需要任何.h / .lib / .dll文件。

使用动态链接,您只需要.h文件进行编译和链接。您的可执行文件会更小,但在运行时需要一个或两个.dll文件。

要从Visual Studio的角度对此进行更详细的处理,请查看http://msdn.microsoft.com/en-us/library/1ez7dh12.aspx -

  

“动态链接与静态链接的不同之处在于,它允许可执行模块(.dll或.exe文件)仅包含运行时所需的信息,以查找DLL函数的可执行代码。在静态链接中,链接器从静态链接库获取所有引用的函数,并将它与您的代码放在可执行文件中。“

答案 1 :(得分:2)

测试项目是statically链接的 - lib包含在exe。

您的项目是dynamically链接的 - 引用了dll,因此需要在运行时使用。

有关详细信息,请参阅此Stack Overflow question