“Symbol(s) not found for architecture x86_64” on QtCreator project

前端 未结 5 1682
梦谈多话
梦谈多话 2020-11-29 08:18

I\'m getting the error

Symbol(s) not found for architecture x86_64

Trying to compile a project on Qt

相关标签:
5条回答
  • 2020-11-29 08:40

    The problem in my case was that i had a project with many subproject and one of the pro files of the subprojects was empty.

    0 讨论(0)
  • 2020-11-29 08:47

    In my opinion, the error message that Qt Creator displays is quite misleading until you understand it, but does not prevent splitting the template class into a header and implementation file. If you think about the message:

    Symbol(s) not found for architecture x86_64
    

    the problem, I originally thought when I saw this, is that it states this error on its own in the Issues output and can lead the user into thinking that the problem is due to the architecture. Actually, all its saying is that there's a defined symbol (often function) whose matching implementation wasn't found.

    If you change from Issues to the Compile Output window and scroll up, you'll be able to see exactly what symbols can't be found; mine's displayed in red. It's just annoying that the detail of the missing symbol(s) doesn't show up in the Issues view.

    It's easy to replicate this error by just adding a function definition into a header and without implementing the function, call it from the .cpp file. You'll then see something like this in the Issues window

    symbol not found

    Switching to the Compile Output view and scrolling up displays this: -

    enter image description here

    So now we see that tthe actual problem is that the function DoSomeStuff in the class called PGGui is being called from the constructor PGGui::PGGui, but the body of DoSomeStuff is missing, as its symbol is not found.

    0 讨论(0)
  • 2020-11-29 08:51

    Fortunately I've managed to solve my problem before any answers, so, if anyone is experiencing anything similar, the issue was that it seems you can't split a templated class into a .cpp and a .h file. Putting all declarations of the .cpp file back into the .h solved the issue.

    I still had a leftover problem, though: duplicated symbols (which was the reason I split it). This time, declaring a variable as external in the .h, and redeclaring it without the external keyword in one (and only one) .cpp file solved the issue for good.

    0 讨论(0)
  • 2020-11-29 08:51

    For me, I forgot to write the name of the class object when declaring the function in .cpp file.

    wrong: int Zero(int &num)

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

    Where Common2 is the class.

    0 讨论(0)
  • 2020-11-29 08:58

    For me this problem resulted from not rebuilding the make file after adding another source file and header.

    Under Build: Cleanall->run qMake->run

    fixed the error for me.

    0 讨论(0)
提交回复
热议问题