【问题标题】:"Symbol(s) not found for architecture x86_64" on QtCreator projectQtCreator 项目上的“未找到架构 x86_64 的符号”
【发布时间】:2013-09-29 03:55:22
【问题描述】:

我收到了错误

Symbol(s) not found for architecture x86_64

试图在 QtCreator 上编译一个项目。当我尝试创建用户定义类Layer 的实例时会发生这种情况。该类由一个标头layer.h 和一个实现layer.cpp 组成。它经过测试并在另一个程序中工作。在我的项目中,它包含在qtwidget.h 中,当我尝试在qtwidget.cpp 上使用它时会发生错误。例如:

Layer<double> text("pq.txt",0.5,0.5,0.5);

qtwidget.cpp 上有这一行就足以显示错误。

这是一个非常普遍的错误,我不知道如何进一步隔离它,但如果有帮助,我已将整个项目包含在 this git repo 上。

【问题讨论】:

    标签: c++ qt compiler-errors


    【解决方案1】:

    幸运的是,我已经设法在任何答案之前解决了我的问题,因此,如果有人遇到类似情况,问题是您似乎 无法将模板化类拆分为 .cpp 和 .h文件。将.cpp 文件的所有声明放回.h 解决了这个问题。

    不过,我还有一个遗留问题:重复的符号(这就是我拆分它的原因)。这一次,在.h 中将变量声明为external,并在一个(也是唯一一个).cpp 文件中重新声明它而不使用external 关键字,从而解决了这个问题。

    【讨论】:

      【解决方案2】:

      在我看来,Qt Creator 显示的错误消息在您理解之前是相当具有误导性的,但并不妨碍将模板类拆分为头文件和实现文件。如果您考虑一下消息:

      Symbol(s) not found for architecture x86_64
      

      问题,当我看到这个时,我最初认为,它在 Issues 输出中自己声明了这个错误,并且可以引导用户认为问题是由架构引起的。实际上,它的所有说法都是有一个已定义的符号(通常是函数),它的匹配实现没有找到。

      如果您从Issues 切换到Compile Output 窗口并向上滚动,您将能够准确地看到哪些符号找不到;我的显示为红色。 Issues 视图中没有显示丢失符号的详细信息,这很烦人。

      很容易复制此错误,只需将函数定义添加到标头中并且不实现该函数,从 .cpp 文件中调用它。然后您会在“问题”窗口中看到类似的内容

      切换到编译输出视图并向上滚动显示:-

      所以现在我们看到实际的问题是,从构造函数 PGGui::PGGui 调用了名为 PGGui 的类中的函数 DoSomeStuff,但是由于找不到它的符号,所以缺少 DoSomeStuff 的主体。

      【讨论】:

      • 这也是我的问题。我有几个我忘记定义的插槽。谢谢。 (:
      【解决方案3】:

      对我来说,这个问题是由于在添加另一个源文件和头文件后没有重建 make 文件造成的。

      在构建中: Cleanall->运行qMake->运行

      为我修复了错误。

      【讨论】:

        【解决方案4】:

        我的问题是我有一个包含许多子项目的项目,而其中一个子项目的 pro 文件是空的。

        【讨论】:

          【解决方案5】:

          对于我来说,我在.cpp文件中声明函数时忘记写类对象的名称了。

          错误:int Zero(int &amp;num)

          右:int Common2::Zero(int &amp;num)

          Common2 是类。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2013-08-17
            • 2018-11-11
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多