我需要运送导入库吗

Do I need to ship import libraries?

本文关键字:导入      更新时间:2023-10-16

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

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

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

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

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

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

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

OTOH,如果你的最终产品是一个DLL,你可以提供你的产品的*.lib文件,这样开发者就可以链接到你的DLL。

由于dbghelp.dll是在windows中默认提供的,我希望应用程序在任何windows机器上都能正常工作。我说得对吗假设这样?

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

引用MSDN:

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

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

这些包含DLL的重新分发策略旨在让人们尽可能容易地将这些文件在其自己的包和版本中。

请注意,必须从Windows调试工具(而不是系统中的调试工具)分发文件。