我有一个使用windows dbghelp.dll的应用程序(主要用于读取dll的PE文件头)。要使用dll,我必须在链接器选项中包含dbghelp.lib(导入库)。
我了解导入库的功能。我的问题是,当我将我的应用程序分发给用户时,.lib文件是否也与它打包在一起?由于.lib文件是VS的sdk的一部分,我不希望我的用户拥有此文件。
由于默认情况下在Windows中提供了dbghelp.dll,我希望我的应用程序能够在任何Windows机器上正常运行。我假设这是正确的吗?
注意:我知道不同版本的dbghelp.dll存在于不同版本中,以及在运行时在不同计算机上有时会出现问题。
答案 0 :(得分:0)
我的问题是,当我向用户分发我的应用程序时,是 .lib文件也包装好了吗?
不,您不需要将dbghelp.lib
文件分发给最终用户,因为只需要构建您的应用程序(在链接阶段)。
请注意,如果您的应用程序是开源的,那么同样适用于开发人员。他们需要使用SDK来构建您的应用程序,因此已处置dbghelp.lib
文件。
OTOH,如果您的最终产品是DLL,您可以提供产品的*.lib
文件,以便开发人员可以链接您的DLL。
因为默认情况下在windows中提供了dbghelp.dll,所以我期待我的 应用程序在任何Windows机器上正常工作。我纠正了吗 假设这个?
这是一个很好的问题,答案是肯定的,不是。 dbghelp.dll
有点特别,因为它经常升级,但从不作为系统更新的一部分(除了bug)。因此,在大多数情况下,您的应用程序将正常工作,但如果您使用最新版本,则不能指望最终用户在其系统上使用它。因此,您的应用程序可能无法正常工作。
引用MSDN:
虽然此DLL包含在所有受支持的Windows版本中,但它仍然存在 很少是最新版本的DbgHelp可用
因此,您可以自由(与大多数系统DLL不同)重新分发dbghelp.dll
文件(沿着符号服务器文件,即SymSrv.dll
和SrcSrv.dll
,这些文件未包含在系统中。):
这些包含的DLL的重新分发策略是具体的 旨在让人们尽可能轻松地包含这些内容 文件在他们自己的包和版本中。
请注意,您必须分发Debugging Tools For Windows(不是系统中的文件)中的文件。