“在QtCreator项目中找不到架构x86_64的符号”

时间:2013-09-24 04:38:00

标签: c++ qt compiler-errors

我收到了错误

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

5 个答案:

答案 0 :(得分:45)

在我看来,Qt Creator显示的错误消息在您理解之前会产生误导,但不会阻止将模板类拆分为标题和实现文件。如果你想一下这条消息:

Symbol(s) not found for architecture x86_64

问题,我原本以为在我看到这个问题时,它会在 Issues 输出中单独声明此错误,并且可能导致用户认为问题是由架构造成的。实际上,它的所有说法都是有一个定义的符号(通常是函数),找不到匹配的实现。

如果您从问题更改为编译输出窗口并向上滚动,您将能够确切地看到无法找到哪些符号;我的用红色显示。令人讨厌的是,问题视图中没有显示缺失符号的详细信息。

只需将函数定义添加到标题中而不实现该函数,就可以轻松复制此错误,从.cpp文件中调用它。然后,您将在“问题”窗口中看到类似的内容

symbol not found

切换到Compile Output视图并向上滚动显示: -

enter image description here

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

答案 1 :(得分:8)

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

但我仍然有一个遗留问题:重复的符号(这就是我分裂它的原因)。这一次,在external中将变量声明为.h,并在一个(只有一个)external文件中重新声明没有.cpp关键字的问题,解决了这个问题。

答案 2 :(得分:2)

对我来说,这个问题是因为在添加另一个源文件和标题后没有重建make文件。

在Build下: Cleanall-&gt;运行qMake-&gt;运行

为我修复了错误。

答案 3 :(得分:0)

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

答案 4 :(得分:-1)

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

错误:int Zero(int &num)

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

Common2是哪个类。