【问题标题】:C++ Symbols not found未找到 C++ 符号
【发布时间】:2014-12-14 15:59:39
【问题描述】:

我正在尝试编译 3 个项目:

  • 静态库 (.lib)
  • 使用静态库的 .lib 的动态库 (.dll)。
  • 使用动态库的 .dll 的应用程序 (.exe)

但是,当尝试编译 .exe 并设置断点时,我收到警告“当前不会命中断点。没有为此文档加载任何符号。”
好吧,我知道 Visual Studio 以某种方式缺少 .pdb 文件。但是,我不明白为什么 Visual Studio 找不到它。

  • 正在生成静态库的 .pdb 文件,与 .lib 位于同一文件夹中。
  • 动态库引用静态库的 .lib 和 .pdb 所在的文件夹。在为动态库创建 .dll 的同一文件夹中创建一个 .pdb 文件。
  • 应用在编译前将动态库的.dll和.pdb复制到生成.exe的文件夹中。

不过,Visual Studio 仍然抱怨它没有加载任何符号。在输出控制台中,它还告诉我它已经加载了 .exe 和 .dll 的符号,但没有加载 .lib 的符号。我是不是有点想念?

【问题讨论】:

  • 为什么标题标记为C++,然后将问题标记为C?
  • 这是一个 C++ 项目。
  • 这个问题不应该同时适用于 C 和 C++ 吗?
  • 您是否在启用调试的情况下编译和链接?
  • 我在 Visual Studio 的解决方案配置中切换到“调试”,所以应该启用它。它还生成了 .pdb 文件。

标签: c++ visual-c++


【解决方案1】:

在编译.exe的时候,还是应该链接到编译.dll时已经生成的.lib文件(所以我说的是动态库自带的.lib,不是自带的静态的)。

根据您的 Visual Studio 版本,您可以在此处进行配置: 项目->属性->配置属性->链接器>输入->附加依赖

【讨论】:

    【解决方案2】:

    什么版本的 Visual Studio?所有项目都在同一个解决方案中吗?如果是这样,只需将库作为 reference 添加到 DLL,并将 DLL 作为 reference 添加到 EXE。然后 Visual Studio 处理链接所有内容,.exe、.dll 和 .pdb 文件应该都在解决方案输出目录中。

    另外,如果您使用LoadLibrary 加载 DLL,调试器将不会加载调试信息,并且在加载 DLL 之前不知道在哪里设置断点,这可能会导致您遇到的错误也看到了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-26
      • 2021-12-17
      • 2021-07-18
      • 2014-08-31
      • 2018-10-21
      相关资源
      最近更新 更多