所有这些都是在msbuild的上下文中进行的,但是我确定无论构建系统如何,总的原则都适用。我正在更新一些vcxproj文件以构建一些单元测试(一个DLL),并且遇到LNK2001错误,该错误说在dbghelp.lib(Windows SDK)中找不到对某些功能的引用。
在将我的unittest vcxproj文件与与测试内容(一个Lib)关联的vcxproj进行比较时,我没有看到任何指向dbghelp.lib的链接。我的同事告诉我,在Lib中,您只需要解析在lib中使用的引用,而对于Exe / Dll,则需要解析所有引用。
我的猜测是,在Lib中,使用哪些引用是由lib的作者控制的,因此仅需要解析使用的引用。对于Exe / Dlls,没有这样的保证,因此需要解决所有引用。听起来正确吗,还有其他更多吗?
相关,如果我想了解更多信息,有没有涉及该主题的好书推荐?
答案 0 :(得分:1)
您的主要问题的答案是肯定的,仅此而已。您可以改用动态分辨率(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上详细告诉您在哪里可以找到有关链接器选项的材料。