我需要运送导入库吗?

Do I need to ship import libraries?

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

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

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

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

My question is , when I distribute my application to users, is the .lib file also packaged with it?

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

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

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

since dbghelp.dll is provided by default in windows, I expect my application to work correctly on any windows machine. Am I correct in assuming this?

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

引用 MSDN:

Although this DLL is included in all supported versions of Windows, it is rarely the most current version of DbgHelp available

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

The redistribution policies for these included DLLs were specifically designed to make it as easy as possible for people to include these files in their own packages and releases.

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