我从硬件供应商处获得了一个.h文件,两个.lib文件,一个.dll文件和一个小型测试项目,以便与他们的硬件进行通信。
编译并运行他们的测试项目工作得很好。值得注意的是:他们不使用.dll。我可以抛弃dll目录及其所有内容,一切正常。
为了开始,我只需将代码的通信部分(连接,断开连接并发送命令)复制到我的项目中。这实际上就是你所能做的一切。我已经包含.h文件并指向包含.lib文件的目录。就像在微小的测试项目中一样。这一切都编译,但当我尝试运行该项目时,它抱怨它缺少.dll文件。
有人可以解释发生了什么吗? libs和dll应该如何工作?
所有这些都在Windows上,VS2005。我比较了.vcproj文件,找不到任何显着的差异。
答案 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。