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. undefined reference to `vtable for shutdown'

undefined reference to `vtable for shutdown'

Scheduled Pinned Locked Moved Solved General and Desktop
60 Posts 6 Posters 7.8k Views
  • 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.
  • SPlattenS SPlatten

    @JoeCFD , same result.

    JoeCFDJ Offline
    JoeCFDJ Offline
    JoeCFD
    wrote on last edited by JoeCFD
    #26

    @SPlatten ~shutdown() has to be virtual. It is better to start with upper case in your class name(Shutdown). Normally function starts with lower case.
    also make sure shutdown.cpp is added to cmake file

        explicit shutdown(const char* cpszText, QWidget* pParent = 0);
        virtual ~shutdown();
    
    JonBJ 1 Reply Last reply
    0
    • JoeCFDJ JoeCFD

      @SPlatten ~shutdown() has to be virtual. It is better to start with upper case in your class name(Shutdown). Normally function starts with lower case.
      also make sure shutdown.cpp is added to cmake file

          explicit shutdown(const char* cpszText, QWidget* pParent = 0);
          virtual ~shutdown();
      
      JonBJ Offline
      JonBJ Offline
      JonB
      wrote on last edited by
      #27

      @JoeCFD

      @SPlatten said in undefined reference to `vtable for shutdown':

      @J-Hilk . that was the entire class, I've added virtual to the destructor prototype, rebuilding now.

      @SPlatten
      Let's be clear: you are now compiling with

      public:
          explicit shutdown(const char* cpszText, QWidget* pParent = 0);
          virtual ~shutdown();
      

      right?

      JoeCFDJ SPlattenS 2 Replies Last reply
      0
      • JonBJ JonB

        @JoeCFD

        @SPlatten said in undefined reference to `vtable for shutdown':

        @J-Hilk . that was the entire class, I've added virtual to the destructor prototype, rebuilding now.

        @SPlatten
        Let's be clear: you are now compiling with

        public:
            explicit shutdown(const char* cpszText, QWidget* pParent = 0);
            virtual ~shutdown();
        

        right?

        JoeCFDJ Offline
        JoeCFDJ Offline
        JoeCFD
        wrote on last edited by
        #28

        @JonB I did not see that one. Could be the case he changed it and did not save it.

        1 Reply Last reply
        0
        • JonBJ JonB

          @SPlatten said in undefined reference to `vtable for shutdown':

          ../../(shutdown.cc.o): In function `shutdown::shutdown(char const*, QWidget*)':

          Note that this .o file is being found in ../.. from where you are/the compiler is being run. Is that indeed correct for you, and where you have deleting files from? Do you by any chance have any other shutdown.cc.o file lying around anywhere from, say, the whole of ../.. downward?

          I have no experience of " I have added a class one of the libraries which are built with cmake". But when you do a complete rebuild I am expecting you to see among the commands:

          • A uic run on on shutdown.ui, producing ui_shutdown.h.
          • A cc (or whatever) compilation run on shutdown.cc, producing shutdown.o.
          • A cc on moc_shotdown.cc, or similar, producing <can't recall>.
          • Some kind of ld (or maybe cc) doing the linking. It will involve shutdown.cc.o, I can't remember how moc works, whether there is a moc_shutdown.cc.o or just the moc_shutdown.h or whatever source file.

          This is not for you to paste the whole output here, it's for you to look at just to verify. It ought be correct anyway.

          SPlattenS Offline
          SPlattenS Offline
          SPlatten
          wrote on last edited by
          #29

          @JonB , the only place the shutdown.cc.o exists is off the build directory which I am still deleting completely between rebuilds.

          Kind Regards,
          Sy

          JonBJ 1 Reply Last reply
          0
          • JonBJ JonB

            @JoeCFD

            @SPlatten said in undefined reference to &#x60;vtable for shutdown':

            @J-Hilk . that was the entire class, I've added virtual to the destructor prototype, rebuilding now.

            @SPlatten
            Let's be clear: you are now compiling with

            public:
                explicit shutdown(const char* cpszText, QWidget* pParent = 0);
                virtual ~shutdown();
            

            right?

            SPlattenS Offline
            SPlattenS Offline
            SPlatten
            wrote on last edited by
            #30

            @JonB , I've changed these prototypes several times with the same result each time, presently they are:

            public:
                shutdown(const char* cpszText, QWidget *pParent = 0);
                ~shutdown();
            

            Kind Regards,
            Sy

            JoeCFDJ 1 Reply Last reply
            0
            • SPlattenS SPlatten

              @JonB , I've changed these prototypes several times with the same result each time, presently they are:

              public:
                  shutdown(const char* cpszText, QWidget *pParent = 0);
                  ~shutdown();
              
              JoeCFDJ Offline
              JoeCFDJ Offline
              JoeCFD
              wrote on last edited by
              #31

              @SPlatten this is wrong. You have always to have virtual in front of a destructor. Otherwise, you may have unpleasant memory leak in your apps.

              SPlattenS 1 Reply Last reply
              0
              • SPlattenS SPlatten

                @JonB , the only place the shutdown.cc.o exists is off the build directory which I am still deleting completely between rebuilds.

                JonBJ Offline
                JonBJ Offline
                JonB
                wrote on last edited by JonB
                #32

                @SPlatten
                I am lost at this point. It might be that one of the experts knows better than I what situation you are in. You would have to wait for them to see this, perhaps later.

                At this point, if I were you and I had nothing else to do I would probably take what you have and put it into a brand new, from scratch, standalone tiny project (maybe get rid of the .ui file too) and see if I could get it working as (a) a standalone Qt program (provide a main()) and (b) whatever you are doing for " I have added a class [to] one of the libraries" which I don't know about.

                public:
                    shutdown(const char* cpszText, QWidget *pParent = 0);
                    ~shutdown();
                

                I do think you should write virtual ~shutdown(); here, just in case.

                SPlattenS 1 Reply Last reply
                0
                • JoeCFDJ JoeCFD

                  @SPlatten this is wrong. You have always to have virtual in front of a destructor. Otherwise, you may have unpleasant memory leak in your apps.

                  SPlattenS Offline
                  SPlattenS Offline
                  SPlatten
                  wrote on last edited by
                  #33

                  @JoeCFD , ok, I've changed the constructor so it is prefixed with explicit and the destructor with virtual which goes back to how it was and I still have the same issue.

                  Kind Regards,
                  Sy

                  JoeCFDJ 1 Reply Last reply
                  0
                  • JonBJ JonB

                    @SPlatten
                    I am lost at this point. It might be that one of the experts knows better than I what situation you are in. You would have to wait for them to see this, perhaps later.

                    At this point, if I were you and I had nothing else to do I would probably take what you have and put it into a brand new, from scratch, standalone tiny project (maybe get rid of the .ui file too) and see if I could get it working as (a) a standalone Qt program (provide a main()) and (b) whatever you are doing for " I have added a class [to] one of the libraries" which I don't know about.

                    public:
                        shutdown(const char* cpszText, QWidget *pParent = 0);
                        ~shutdown();
                    

                    I do think you should write virtual ~shutdown(); here, just in case.

                    SPlattenS Offline
                    SPlattenS Offline
                    SPlatten
                    wrote on last edited by
                    #34

                    @JonB , I believe this issue is because the build process is using just cmake and hasn't been done with Qt Creator. I can't change it, its an old system that is evolving over time.

                    Kind Regards,
                    Sy

                    1 Reply Last reply
                    0
                    • SPlattenS Offline
                      SPlattenS Offline
                      SPlatten
                      wrote on last edited by
                      #35

                      Just for completeness, here is the actual content of the CMakeLists.txt file:

                      cmake_minimum_required(VERSION 2.8.10)
                      include (flexelint) 
                      
                      set (CMAKE_AUTOUIC ON)
                      set (CMAKE_AUTOMOC ON)
                      set (CMAKE_AUTORCC ON)
                      set (CMAKE_INCLUDE_CURRENT_DIR ON)
                      
                      set (FORMS shutdown_ui)
                      set (HEADERS shutdown.h
                                   ui_shutdown.h)
                      set (sources shutdown.cc)
                      set (output vip_backend)
                      add_library(${output} STATIC ${sources})
                      find_package(Qt4 REQUIRED)
                      include(${QT_USE_FILE})
                      foreach(loop_var ${QT_LIBRARIES})
                        string(REPLACE lib64 lib32 loop_var ${loop_var})
                        set(QT_LIBRARIES_32 ${QT_LIBRARIES_32} ${loop_var})
                      endforeach(loop_var)
                      qt4_wrap_ui(UI_HEADERS ${FORMS})
                      qt4_wrap_cpp(MOC_SRCS ${HEADERS})
                      target_link_libraries(${output} ${QT_LIBRARIES_32})
                      add_flint(${output})
                      

                      I have no idea what flexelint is or what it does, same is true of add_flint(${output}).

                      Kind Regards,
                      Sy

                      Christian EhrlicherC 1 Reply Last reply
                      0
                      • SPlattenS SPlatten

                        @JoeCFD , ok, I've changed the constructor so it is prefixed with explicit and the destructor with virtual which goes back to how it was and I still have the same issue.

                        JoeCFDJ Offline
                        JoeCFDJ Offline
                        JoeCFD
                        wrote on last edited by JoeCFD
                        #36

                        @SPlatten forget about Qt Creator. Try to build it from command line
                        Delete build folder
                        Create build folder
                        From build folder cmake ${myvariable}
                        From build folder make VERBOSE=1
                        add verbose to see more build details.

                        SPlattenS 1 Reply Last reply
                        0
                        • JoeCFDJ JoeCFD

                          @SPlatten forget about Qt Creator. Try to build it from command line
                          Delete build folder
                          Create build folder
                          From build folder cmake ${myvariable}
                          From build folder make VERBOSE=1
                          add verbose to see more build details.

                          SPlattenS Offline
                          SPlattenS Offline
                          SPlatten
                          wrote on last edited by SPlatten
                          #37

                          @JoeCFD , that is exactly all I am doing. Also cmake is version 2.8.10.2

                          rm -R build
                          mkdir build
                          cd build
                          cmake ${myvariable}
                          make 
                          

                          In the CMakeLists.txt file I have:

                          set (CMAKE_VERBOSE_MAKEFILE ON)
                          

                          Kind Regards,
                          Sy

                          JoeCFDJ 2 Replies Last reply
                          0
                          • SPlattenS SPlatten

                            @JoeCFD , that is exactly all I am doing. Also cmake is version 2.8.10.2

                            rm -R build
                            mkdir build
                            cd build
                            cmake ${myvariable}
                            make 
                            

                            In the CMakeLists.txt file I have:

                            set (CMAKE_VERBOSE_MAKEFILE ON)
                            
                            JoeCFDJ Offline
                            JoeCFDJ Offline
                            JoeCFD
                            wrote on last edited by
                            #38

                            @SPlatten Jesus, your cmake is old.

                            SPlattenS 1 Reply Last reply
                            0
                            • JoeCFDJ JoeCFD

                              @SPlatten Jesus, your cmake is old.

                              SPlattenS Offline
                              SPlattenS Offline
                              SPlatten
                              wrote on last edited by
                              #39

                              @JoeCFD , its very frustrating, its very unusual to find a company these days that are so behind on revisions.

                              Kind Regards,
                              Sy

                              1 Reply Last reply
                              0
                              • SPlattenS SPlatten

                                @JoeCFD , that is exactly all I am doing. Also cmake is version 2.8.10.2

                                rm -R build
                                mkdir build
                                cd build
                                cmake ${myvariable}
                                make 
                                

                                In the CMakeLists.txt file I have:

                                set (CMAKE_VERBOSE_MAKEFILE ON)
                                
                                JoeCFDJ Offline
                                JoeCFDJ Offline
                                JoeCFD
                                wrote on last edited by
                                #40

                                @SPlatten
                                rm -R build
                                mkdir build
                                cd build
                                cmake ${myvariable}
                                make VERBOSE=1

                                SPlattenS 1 Reply Last reply
                                0
                                • JoeCFDJ JoeCFD

                                  @SPlatten
                                  rm -R build
                                  mkdir build
                                  cd build
                                  cmake ${myvariable}
                                  make VERBOSE=1

                                  SPlattenS Offline
                                  SPlattenS Offline
                                  SPlatten
                                  wrote on last edited by
                                  #41

                                  @JoeCFD , doing that now.

                                  Kind Regards,
                                  Sy

                                  JoeCFDJ 1 Reply Last reply
                                  0
                                  • SPlattenS SPlatten

                                    @JoeCFD , doing that now.

                                    JoeCFDJ Offline
                                    JoeCFDJ Offline
                                    JoeCFD
                                    wrote on last edited by JoeCFD
                                    #42

                                    @SPlatten As Jon commented, you can comment the destructor code out and build. It is a small leak. Not a big deal. shutdown is not a good name for class. Try to avoid to use any system command names as your class names. Name it for example ShutdownWindow.

                                    SPlattenS 2 Replies Last reply
                                    0
                                    • JoeCFDJ JoeCFD

                                      @SPlatten As Jon commented, you can comment the destructor code out and build. It is a small leak. Not a big deal. shutdown is not a good name for class. Try to avoid to use any system command names as your class names. Name it for example ShutdownWindow.

                                      SPlattenS Offline
                                      SPlattenS Offline
                                      SPlatten
                                      wrote on last edited by
                                      #43

                                      @JoeCFD , will try this now.

                                      Kind Regards,
                                      Sy

                                      1 Reply Last reply
                                      0
                                      • JoeCFDJ JoeCFD

                                        @SPlatten As Jon commented, you can comment the destructor code out and build. It is a small leak. Not a big deal. shutdown is not a good name for class. Try to avoid to use any system command names as your class names. Name it for example ShutdownWindow.

                                        SPlattenS Offline
                                        SPlattenS Offline
                                        SPlatten
                                        wrote on last edited by
                                        #44

                                        @JoeCFD , output has changed:

                                        ../../(usage.cc.o): In function 'shutdownNotice(char cont*)':
                                        vip_system.cc:(.text+0xe1): undefined reference to `vtable for shutdown'
                                        vip_system.cc:(.text+0xe9): undefined reference to `vtable for shutdown'
                                        vip_system.cc:(.text+0x100): undefined reference to `vtable for shutdown'
                                        vip_system.cc:(.text+0x108): undefined reference to `vtable for shutdown'
                                        ../../(shutdown.cc.o): In function 'shutdown::shutdown(char cont*, QWidget*)':
                                        shutdown.cc:(text+0x3a): undefined reference to `vtable for shutdown'
                                        ../../(shutdown.cc.o):shutdown.cc(.text+0x41): more undefined references to `vtable for shutdown' follow collect2 ld returned 1 exit status
                                        

                                        Kind Regards,
                                        Sy

                                        1 Reply Last reply
                                        0
                                        • JoeCFDJ Offline
                                          JoeCFDJ Offline
                                          JoeCFD
                                          wrote on last edited by
                                          #45

                                          are you building on Linux, right? If yes, change your class name with ShutdownWindow (do not forget the ui file).

                                          SPlattenS 3 Replies 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