我需要运送导入库吗?

时间:2015-12-22 16:00:59

标签: c++ dll package portable-executable import-libraries

我有一个使用windows dbghelp.dll的应用程序(主要用于读取dll的PE文件头)。要使用dll,我必须在链接器选项中包含dbghelp.lib(导入库)。

我了解导入库的功能。我的问题是,当我将我的应用程序分发给用户时,.lib文件是否也与它打包在一起?由于.lib文件是VS的sdk的一部分,我不希望我的用户拥有此文件。

由于默认情况下在Windows中提供了dbghelp.dll,我希望我的应用程序能够在任何Windows机器上正常运行。我假设这是正确的吗?

注意:我知道不同版本的dbghelp.dll存在于不同版本中,以及在运行时在不同计算机上有时会出现问题。

1 个答案:

答案 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.dllSrcSrv.dll,这些文件未包含在系统中。):

  

这些包含的DLL的重新分发策略是具体的   旨在让人们尽可能轻松地包含这些内容   文件在他们自己的包和版本中。

请注意,您必须分发Debugging Tools For Windows(不是系统中的文件)中的文件。