0

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

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

由于 dbghelp.dll 在 Windows 中默认提供,我希望我的应用程序能够在任何 Windows 机器上正常工作。我的假设是否正确?

注意:我确实知道不同版本的 dbghelp.dll 的不同版本,以及在不同机器上运行时有时会如何导致问题。

4

1 回答 1

0

我的问题是,当我将我的应用程序分发给用户时,.lib 文件是否也与它一起打包?

不,您不需要将dbghelp.lib文件分发给最终用户,因为它只需要构建您的应用程序(在链接阶段)。

请注意,如果您的应用程序是开源的,这同样适用于开发人员。他们应该有 SDK 来构建您的应用程序,因此已经拥有该dbghelp.lib文件。

OTOH,如果您的最终产品是 DLL,您可以提供*.lib产品文件,以便开发人员可以链接到您的 DLL。

由于 dbghelp.dll 在 Windows 中默认提供,我希望我的应用程序能够在任何 Windows 机器上正常工作。我的假设是否正确?

这是一个很好的问题,答案是肯定的和否定的。dbghelp.dll有点特别,因为它经常升级,但从作为系统更新的一部分(错误除外)。因此,您的应用程序在大多数情况下都可以正常工作,但如果您使用最新版本,您就不能期望最终用户在其系统上安装它。因此,您的应用程序可能无法正常工作。

引用MSDN

尽管此 DLL 包含在所有受支持的 Windows 版本中,但它很少是可用的最新 DbgHelp 版本

因此,您可以自由(与大多数系统 DLL 不同)重新分发dbghelp.dll文件(沿着符号服务器文件,即SymSrv.dll,并且SrcSrv.dll不包含在系统中。):

这些包含的 DLL 的重新分发策略专门设计用于使人们尽可能容易地将这些文件包含在他们自己的包和版本中。

请注意,您必须分发来自Windows 调试工具的文件(而不是来自您系统的那个)。

于 2015-12-23T09:41:12.783 回答