所有这些都是在msbuild的上下文中进行的,但是我确信无论构建系统如何,总的原则都适用。我正在更新一些vcxproj文件以构建某些单元测试(一个DLL),并且遇到LNK2001错误,该错误说在dbghelp.lib(Windows SDK)中找不到对某些功能的引用。
将我的unittest vcxproj文件与与我的测试内容(一个Lib)关联的vcxproj进行比较时,没有看到任何指向dbghelp.lib的链接。我的同事告诉我,在Lib中,您只需要解析在lib中使用的引用,但是对于Exe / Dll,您需要解析所有引用。
我的猜测是,在Lib中,使用哪些引用是由lib的作者控制的,因此仅需要解决使用的引用。对于Exe / Dll,没有这种保证,因此需要解决所有引用。这听起来是否正确,而且还有更多呢?
相关,如果我想了解更多信息,有没有涉及该主题的好书推荐?
最佳答案
您主要问题的答案是肯定的,仅此而已。您可以改用动态分辨率(LoadLibrary / GetProcAddress)来解决对静态符号分辨率的需求。
您所询问的主题是构建中如此简单且不可或缺的一部分,以至于我不知道有什么将其视为主要主题,也没有任何东西能够详细地处理Windows现象。约翰·雷文(John R. Levine)的书“链接程序和装载程序”(Linkers and Loaders)提供了对该主题更像Unix的处理方式。并且有特定于工具的文档集。
对于Microsoft工具,我强烈建议您查看https://docs.microsoft.com/en-us/visualstudio/?view=vs-2017#pivot=get-started&panel=get-started1处的Visual Studio资料(首选较旧的MSDN,但看到资料从那里消失了,并且我使用较旧的MSDN文档集的本地副本,因此无法详细告诉您在docs.microsoft.com上找到有关链接器选项的材料)。
关于c++ - 解决引用| Exe/Dll vs自由,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52752383/