C++ 解析引用| Exe/Dll vs Lib

C++ 解析引用| Exe/Dll vs Lib,c++,build,msbuild,C++,Build,Msbuild,所有这些都是在msbuild的上下文中进行的,但我确信无论构建系统如何,一般原则都适用。我正在更新一些vcxproj文件以构建一些单元测试(一个DLL),但遇到了一个LNK2001错误,表示没有引用dbghelp.lib(Windows SDK)中的某个函数 将我的unittest vcxproj文件与与我的测试内容(Lib)关联的vcxproj进行比较时,我没有看到任何指向dbghelp.Lib的链接。我的同事告诉我,在Lib中,您只需要解析在Lib中使用的引用,但是对于Exe/Dll,您需要

所有这些都是在msbuild的上下文中进行的,但我确信无论构建系统如何,一般原则都适用。我正在更新一些vcxproj文件以构建一些单元测试(一个DLL),但遇到了一个LNK2001错误,表示没有引用dbghelp.lib(Windows SDK)中的某个函数

将我的unittest vcxproj文件与与我的测试内容(Lib)关联的vcxproj进行比较时,我没有看到任何指向dbghelp.Lib的链接。我的同事告诉我,在Lib中,您只需要解析在Lib中使用的引用,但是对于Exe/Dll,您需要解析所有引用

我的猜测是,在库中,所使用的引用由库的作者控制,因此只需要解析所使用的引用。对于Exe/DLL,没有这样的保证,因此需要解析所有引用。这听起来对吗?还有比这更重要的吗


相关的,如果我想了解更多信息,有没有关于这个主题的好书推荐?

你的主要问题的答案是肯定的,这就是全部内容。您可以通过使用动态解析(LoadLibrary/GetProcAddress)来绕过静态符号解析的需要

您所问的主题是构建中如此简单和不可或缺的一部分,以至于我不知道有任何东西将其作为主要主题,也没有任何东西详细介绍windows isms。约翰·R·莱文(John R.Levine)的《链接器和加载器》(Linker and Loader)一书对该主题进行了更类似于unix的处理。还有一些特定于工具的文档集

对于Microsoft工具,我强烈建议您查看位于的Visual Studio资料(我参考了旧的MSDN,但看到资料从那里消失,并且我使用旧的MSDN文档集的本地副本,因此无法详细告诉您在docs.Microsoft.com的何处可以找到链接器选项的资料)