【问题标题】:Linker not recognizing some #includes?链接器无法识别某些#includes?
【发布时间】:2011-09-09 21:54:49
【问题描述】:

我有一个包含多个项目和多个命名空间的 VC++ 解决方案。每个项目都有自己的命名空间,有些项目有多个命名空间。

有时,当我从另一个项目中引用一个对象时,即使我#included 头文件并通过它的命名空间 (Namespace::object) 引用该对象,我最终也会遇到“未解析的外部符号”错误。为了摆脱链接器错误,我还必须#include cpp 文件,然后我会收到符号被定义两次的警告。

这很hackish,我不喜欢hackish。

我知道我需要检查所有包含依赖项,因为显然有些事情搞砸了,但我还没有发现任何重大问题。

与此同时,是否有人对任何明显需要检查的内容或导致此问题的任何常见原因有任何建议?

【问题讨论】:

  • 相当模糊。使用#include 是不够的,您还必须告诉链接器。它需要链接类的实现。使用 #pragma comment(lib, "whatever.lib") 会有所帮助。

标签: c++ visual-c++ linker include


【解决方案1】:

“未解析的外部符号”是链接器错误。链接并不关心#included 的内容(除非涉及#pragmas)。所有链接都关心的是您明确声明要链接的内容。

您尝试使用的其他项目在编译它们时必须生成一个库或其他东西,对吗?您应该链接到项目设置中的那些。

【讨论】:

    【解决方案2】:

    如果您使用的是 Visual C++,请转到您的项目属性,在 Linker > Input 下,您应该添加您所依赖的项目的已编译 .lib 文件。
    正如其他人所说,您缺少的编译单元与您#include的文件无关(仅与编译相关,与链接无关)

    【讨论】:

    • 也许通过包含 cpp 文件,它被编译到您的项目中。可能不止一个文件包含了包含cpp文件的header,然后又被定义了两次。
    【解决方案3】:

    链接目标文件不是使用 #include 预处理器命令完成的,而是通过 VC++ 本身或(非标准)#pragma 命令完成的。

    【讨论】:

      猜你喜欢
      • 2016-01-17
      • 2020-08-08
      • 2022-01-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-31
      • 1970-01-01
      相关资源
      最近更新 更多