何时应该包含.lib文件,何时应该包含.dll文件或两者都包含?

4
我收到了一个.h文件、两个.lib文件、一个.dll文件和一个小型测试项目,这些都是硬件供应商提供的,用于与他们的硬件进行通信。编译和运行他们的测试项目很顺利。值得注意的是:他们没有使用.dll文件。我可以把dll目录及其所有内容删除,一切都能正常工作。
为了开始工作,我只是将他们代码中的通信部分(连接、断开连接和发送命令)复制到我的项目中。这实际上是你可以做的全部。我已经包含了.h文件并指向包含.lib文件的目录,就像在小型测试项目中一样。它可以编译,但当我尝试运行该项目时,会出现缺少.dll文件的错误提示。
有人能解释一下发生了什么吗?库文件和动态链接库文件应该如何工作?
所有这些都在Windows操作系统上,使用VS2005。我比较了.vcproj文件,没有找到任何重大差异。

我建议你在stackoverflow.com上发问,那里更适合与编程有关的问题。 - Kez
将 DLL 文件放置在与可执行文件相同的目录中。 - anon
我不明白那怎么回答了我的问题。你能解释一下吗? - AnnaR
2个回答

2
基本上答案取决于您是否要为可执行文件使用静态或动态链接。
使用静态链接时,您需要.h和.lib文件,但不需要.dll文件进行编译和链接。您的可执行文件将更大,但在运行时不需要任何.h/.lib/.dll文件。
使用动态链接时,您只需要.h文件进行编译和链接。您的可执行文件将更小,但在运行时您将需要一个或两个.dll文件。
有关Visual Studio视角的更详细处理,请查看http://msdn.microsoft.com/en-us/library/1ez7dh12.aspx -

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


2
测试项目是静态链接 - 库被包含在可执行文件中。
您的项目是动态链接 - DLL 被引用,因此在运行时需要。
有关更多信息,请参见此 Stack Overflow 问题。

在 Visual Studio 中,我应该在哪里设置我想要一个静态(或动态)链接的项目? - AnnaR
在创建项目时,您需要设置这个。虽然可以更改它,但需要编辑项目文件。 - ChrisF
当然!我很乐意编辑项目文件!我只需要知道要改变什么。 - AnnaR

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