【问题标题】:Resolving references | Exe/Dll vs Lib解析引用 | Exe/Dll 与 Lib
【发布时间】:2019-03-16 01:59:21
【问题描述】:

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

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

我的猜测是,在一个 Lib 中,使用什么引用由该 lib 的作者控制,因此只需要解析使用的引用。对于 Exe/Dlls,没有这样的保证,所以所有的引用都需要被解析。这听起来对吗?还有比这更多的吗?

相关,如果我想了解更多信息,是否有任何涵盖该主题的好书推荐?

【问题讨论】:

    标签: c++ build msbuild


    【解决方案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 上哪里可以找到有关链接器选项的资料)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-12-08
      • 2013-03-05
      • 1970-01-01
      • 2022-12-17
      • 2017-09-19
      • 1970-01-01
      • 2011-02-22
      相关资源
      最近更新 更多