Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. Can't find linker symbol for virtual table
Qt 6.11 is out! See what's new in the release blog

Can't find linker symbol for virtual table

Scheduled Pinned Locked Moved Solved General and Desktop
20 Posts 6 Posters 4.5k Views 3 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • kshegunovK kshegunov

    Then that point is moot. Try initializing the members with an initializer list, the message may be a red herring after all. That is, something like this:

    ClassA::ClassA(QObject * parent)
        : QObject(parent), pB(new ClassB()), pC(new ClassC()), pD(new ClassD()), pE(new ClassE()), pF(new ClassF())
    {
    }
    
    wojjW Offline
    wojjW Offline
    wojj
    wrote on last edited by
    #8

    @kshegunov Didn't help. Still the same warning.

    kshegunovK 1 Reply Last reply
    0
    • wojjW wojj

      @kshegunov Didn't help. Still the same warning.

      kshegunovK Offline
      kshegunovK Offline
      kshegunov
      Moderators
      wrote on last edited by
      #9

      Then the only other thing I can think of is the vtable not being emitted due to a missing definition of a non-inline function (constructor) in one of the classes. Aside from that I have no clue.

      Read and abide by the Qt Code of Conduct

      wojjW 1 Reply Last reply
      0
      • kshegunovK kshegunov

        Then the only other thing I can think of is the vtable not being emitted due to a missing definition of a non-inline function (constructor) in one of the classes. Aside from that I have no clue.

        wojjW Offline
        wojjW Offline
        wojj
        wrote on last edited by
        #10

        @kshegunov I ran ldd for this application and it looks there is missing one libraby
        linux-vdso.so.1 => (0x00007ffeae25a000)

        1 Reply Last reply
        0
        • ? Offline
          ? Offline
          A Former User
          wrote on last edited by
          #11

          @wojj can you upload code somewhere so we can try to reproduce that issue?

          wojjW 1 Reply Last reply
          0
          • ? A Former User

            @wojj can you upload code somewhere so we can try to reproduce that issue?

            wojjW Offline
            wojjW Offline
            wojj
            wrote on last edited by
            #12

            @casdevel All code is in my first post. It's very simple example.

            1 Reply Last reply
            0
            • mranger90M Offline
              mranger90M Offline
              mranger90
              wrote on last edited by
              #13

              We need to see one of [b,c,d,e].cpp, where is the constructor ?

              wojjW 1 Reply Last reply
              0
              • mranger90M mranger90

                We need to see one of [b,c,d,e].cpp, where is the constructor ?

                wojjW Offline
                wojjW Offline
                wojj
                wrote on last edited by
                #14

                @mranger90 Constructors are empty. All for ClassB,C,D,E,F looks the same

                ClassB::ClassB(QObject *parent) : QObject(parent)
                {
                
                }
                
                1 Reply Last reply
                0
                • ? Offline
                  ? Offline
                  A Former User
                  wrote on last edited by
                  #15

                  @wojj

                  All code is in my first post. It's very simple example.

                  It's part of the code, not all. Maybe example is simple but problem is obviously not, otherwise it would already be solved.
                  I think your best bet for solving this would be to upload complete project.

                  wojjW 1 Reply Last reply
                  0
                  • ? A Former User

                    @wojj

                    All code is in my first post. It's very simple example.

                    It's part of the code, not all. Maybe example is simple but problem is obviously not, otherwise it would already be solved.
                    I think your best bet for solving this would be to upload complete project.

                    wojjW Offline
                    wojjW Offline
                    wojj
                    wrote on last edited by
                    #16

                    @casdevel All code below. In my first post I described how to get gdb warning.
                    Main

                    #include <QApplication>
                    
                    #include "classa.h"
                    
                    int main(int argc, char *argv[])
                    {
                        QApplication a(argc, argv);
                        ClassA *pA = new ClassA();
                    
                        return a.exec();
                    }
                    

                    H files

                    #ifndef CLASSA_H
                    #define CLASSA_H
                    
                    #include <QObject>
                    
                    #include "classb.h"
                    #include "classc.h"
                    #include "classd.h"
                    #include "classe.h"
                    #include "classf.h"
                    
                    class ClassA : public QObject
                    {
                        Q_OBJECT
                    
                    public:
                        explicit ClassA(QObject *parent = nullptr);
                        ~ClassA();
                    
                    private:
                        ClassB *pB;
                        ClassC *pC;
                        ClassD *pD;
                        ClassE *pE;
                        ClassF *pF;
                    
                    
                    
                    signals:
                    
                    public slots:
                    };
                    
                    #endif // CLASSA_H
                    
                    
                    
                    #ifndef CLASSB_H
                    #define CLASSB_H
                    
                    #include <QObject>
                    
                    class ClassB : public QObject
                    {
                        Q_OBJECT
                    
                    public:
                        explicit ClassB(QObject *parent = nullptr);
                        ~ClassB();
                    
                    signals:
                    
                    public slots:
                    };
                    
                    #endif // CLASSB_H
                    
                    
                    
                    
                    #ifndef CLASSC_H
                    #define CLASSC_H
                    
                    #include <QObject>
                    
                    class ClassC : public QObject
                    {
                        Q_OBJECT
                    
                    public:
                        explicit ClassC(QObject *parent = nullptr);
                        ~ClassC();
                    
                    signals:
                    
                    public slots:
                    };
                    
                    #endif // CLASSC_H
                    
                    
                    
                    
                    
                    #ifndef CLASSD_H
                    #define CLASSD_H
                    
                    #include <QObject>
                    
                    class ClassD : public QObject
                    {
                        Q_OBJECT
                    
                    public:
                        explicit ClassD(QObject *parent = nullptr);
                        ~ClassD();
                    
                    signals:
                    
                    public slots:
                    };
                    
                    #endif // CLASSD_H
                    
                    
                    
                    
                    #ifndef CLASSE_H
                    #define CLASSE_H
                    
                    #include <QObject>
                    
                    class ClassE : public QObject
                    {
                        Q_OBJECT
                    
                    public:
                        explicit ClassE(QObject *parent = nullptr);
                        ~ClassE();
                    
                    signals:
                    
                    public slots:
                    };
                    
                    #endif // CLASSE_H
                    
                    
                    
                    
                    #ifndef CLASSF_H
                    #define CLASSF_H
                    
                    #include <QObject>
                    
                    class ClassF : public QObject
                    {
                        Q_OBJECT
                    
                    public:
                        explicit ClassF(QObject *parent = nullptr);
                        ~ClassF();
                    
                    signals:
                    
                    public slots:
                    };
                    
                    #endif // CLASSF_H
                    
                    

                    cpp files

                    #include "classa.h"
                    
                    ClassA::ClassA(QObject *parent) : QObject(parent), pB(nullptr), pC(nullptr), pD(nullptr), pE(nullptr), pF(nullptr)
                    {
                        pB = new ClassB();
                        pC = new ClassC();
                        pD = new ClassD();
                        pE = new ClassE();
                        pF = new ClassF();
                    }
                    
                    ClassA::~ClassA()
                    {
                    
                    }
                    
                    
                    #include "classb.h"
                    
                    ClassB::ClassB(QObject *parent) : QObject(parent)
                    {
                    
                    }
                    
                    ClassB::~ClassB()
                    {
                    
                    }
                    
                    
                    
                    #include "classc.h"
                    
                    ClassC::ClassC(QObject *parent) : QObject(parent)
                    {
                    
                    }
                    
                    ClassC::~ClassC()
                    {
                    
                    }
                    
                    
                    
                    #include "classd.h"
                    
                    ClassD::ClassD(QObject *parent) : QObject(parent)
                    {
                    
                    }
                    
                    ClassD::~ClassD()
                    {
                    
                    }
                    
                    
                    
                    #include "classe.h"
                    
                    ClassE::ClassE(QObject *parent) : QObject(parent)
                    {
                    
                    }
                    
                    ClassE::~ClassE()
                    {
                    
                    }
                    
                    
                    
                    #include "classf.h"
                    
                    ClassF::ClassF(QObject *parent) : QObject(parent)
                    {
                    
                    }
                    
                    ClassF::~ClassF()
                    {
                    
                    }
                    
                    
                    1 Reply Last reply
                    0
                    • wojjW Offline
                      wojjW Offline
                      wojj
                      wrote on last edited by
                      #17

                      And .pro file

                      #-------------------------------------------------
                      #
                      # Project created by QtCreator 2018-02-09T17:35:19
                      #
                      #-------------------------------------------------
                      
                      QT       += core gui
                      
                      greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
                      
                      TARGET = Test
                      TEMPLATE = app
                      
                      # The following define makes your compiler emit warnings if you use
                      # any feature of Qt which has been marked as deprecated (the exact warnings
                      # depend on your compiler). Please consult the documentation of the
                      # deprecated API in order to know how to port your code away from it.
                      #DEFINES += QT_DEPRECATED_WARNINGS
                      
                      # You can also make your code fail to compile if you use deprecated APIs.
                      # In order to do so, uncomment the following line.
                      # You can also select to disable deprecated APIs only up to a certain version of Qt.
                      #DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0
                      
                      
                      SOURCES += \
                              main.cpp \
                          classa.cpp \
                          classb.cpp \
                          classc.cpp \
                          classd.cpp \
                          classe.cpp \
                          classf.cpp
                      
                      HEADERS += \
                          classa.h \
                          classb.h \
                          classc.h \
                          classd.h \
                          classe.h \
                          classf.h
                      
                      
                      1 Reply Last reply
                      1
                      • ? Offline
                        ? Offline
                        A Former User
                        wrote on last edited by
                        #18

                        OK, I get the same warning as you if I use Qt 5.10.0, but with older Qt 5.5.1 there is no warning. I didn't investigate why since
                        app is running fine and debugging also working correctly (apart from that warning) with both Qt versions.

                        I think that you can safely ignore this warning since everything is working correctly.

                        jsulmJ 1 Reply Last reply
                        3
                        • ? A Former User

                          OK, I get the same warning as you if I use Qt 5.10.0, but with older Qt 5.5.1 there is no warning. I didn't investigate why since
                          app is running fine and debugging also working correctly (apart from that warning) with both Qt versions.

                          I think that you can safely ignore this warning since everything is working correctly.

                          jsulmJ Offline
                          jsulmJ Offline
                          jsulm
                          Lifetime Qt Champion
                          wrote on last edited by jsulm
                          #19

                          @casdevel @wojj Would be worth to file a bug report to get rid of this warning.
                          And sometimes warnings actually point to real issues :-)

                          https://forum.qt.io/topic/113070/qt-code-of-conduct

                          1 Reply Last reply
                          2
                          • wojjW Offline
                            wojjW Offline
                            wojj
                            wrote on last edited by
                            #20

                            Thank you for help. The problem seems to be related to Qt version in that case.
                            Best regards.

                            1 Reply Last reply
                            0

                            • Login

                            • Login or register to search.
                            • First post
                              Last post
                            0
                            • Categories
                            • Recent
                            • Tags
                            • Popular
                            • Users
                            • Groups
                            • Search
                            • Get Qt Extensions
                            • Unsolved