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. Qt6 porting, undefined symbol: _ZN10EngineBase16staticMetaObjectEHi
Forum Updated to NodeBB v4.3 + New Features

Qt6 porting, undefined symbol: _ZN10EngineBase16staticMetaObjectEHi

Scheduled Pinned Locked Moved Solved General and Desktop
15 Posts 4 Posters 1.4k Views 1 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.
  • sebaroS Offline
    sebaroS Offline
    sebaro
    wrote on last edited by
    #1

    Hi,
    I'm trying to port an app from Qt5 to Qt6. The app is a media/music player with back-ends (mpv, vlc etc) built as libraries. The app and libraries build fine, the app starts and works but fails to load the back-end libraries.

    [ 98%] Linking CXX executable yarock
    [ 98%] Built target yarock
    [ 98%] Built target enginempv_autogen_timestamp_deps
    [ 98%] Automatic MOC and UIC for target enginempv
    [ 98%] Built target enginempv_autogen
    [ 99%] Building CXX object src/core/player/mpv/CMakeFiles/enginempv.dir/engine_mpv.cpp.o
    [ 99%] Building CXX object src/core/player/mpv/CMakeFiles/enginempv.dir/enginempv_autogen/mocs_compilation.cpp.o
    [100%] Linking CXX shared library ../../../../lib/libenginempv.so
    [100%] Built target enginempv
    
     [Engine] Look into library dir: "/home/Apps/YaRock/Yarock_1.4.0_Sources_qt6/build/lib"
     [Engine] Audio engine library directory: "/home/Apps/YaRock/Yarock_1.4.0_Sources_qt6/build/lib"
     [Engine] Try to load  "libenginempv.so"
     "Cannot load library /home/Apps/YaRock/Yarock_1.4.0_Sources_qt6/build/lib/libenginempv.so: /home/Apps/YaRock/Yarock_1.4.0_Sources_qt6/build/lib/libenginempv.so: undefined symbol: _ZN10EngineBase16staticMetaObjectE"
    

    Gentoo Linux, gcc-13, Qt versions 6.6.3 and 6.7.0.

    I think it has something to do with the c++-17 standard, if I set it in CMakeLists.txt for the Qt5 code, I get the same error.

    The back-ends code:
    https://bazaar.launchpad.net/~sebastien-amardeilh/yarock/1.x/files/head:/src/core/player

    Thanks!

    sierdzioS 1 Reply Last reply
    0
    • sebaroS sebaro

      Hi,
      I'm trying to port an app from Qt5 to Qt6. The app is a media/music player with back-ends (mpv, vlc etc) built as libraries. The app and libraries build fine, the app starts and works but fails to load the back-end libraries.

      [ 98%] Linking CXX executable yarock
      [ 98%] Built target yarock
      [ 98%] Built target enginempv_autogen_timestamp_deps
      [ 98%] Automatic MOC and UIC for target enginempv
      [ 98%] Built target enginempv_autogen
      [ 99%] Building CXX object src/core/player/mpv/CMakeFiles/enginempv.dir/engine_mpv.cpp.o
      [ 99%] Building CXX object src/core/player/mpv/CMakeFiles/enginempv.dir/enginempv_autogen/mocs_compilation.cpp.o
      [100%] Linking CXX shared library ../../../../lib/libenginempv.so
      [100%] Built target enginempv
      
       [Engine] Look into library dir: "/home/Apps/YaRock/Yarock_1.4.0_Sources_qt6/build/lib"
       [Engine] Audio engine library directory: "/home/Apps/YaRock/Yarock_1.4.0_Sources_qt6/build/lib"
       [Engine] Try to load  "libenginempv.so"
       "Cannot load library /home/Apps/YaRock/Yarock_1.4.0_Sources_qt6/build/lib/libenginempv.so: /home/Apps/YaRock/Yarock_1.4.0_Sources_qt6/build/lib/libenginempv.so: undefined symbol: _ZN10EngineBase16staticMetaObjectE"
      

      Gentoo Linux, gcc-13, Qt versions 6.6.3 and 6.7.0.

      I think it has something to do with the c++-17 standard, if I set it in CMakeLists.txt for the Qt5 code, I get the same error.

      The back-ends code:
      https://bazaar.launchpad.net/~sebastien-amardeilh/yarock/1.x/files/head:/src/core/player

      Thanks!

      sierdzioS Offline
      sierdzioS Offline
      sierdzio
      Moderators
      wrote on last edited by
      #2

      @sebaro check if your Engine class has Q_OBJECT macro in header. Looks like it might be missing.

      (Z(:^

      sebaroS 1 Reply Last reply
      0
      • sierdzioS sierdzio

        @sebaro check if your Engine class has Q_OBJECT macro in header. Looks like it might be missing.

        sebaroS Offline
        sebaroS Offline
        sebaro
        wrote on last edited by
        #3

        @sierdzio

        The symbol is from engine_base which has the macro:

        #ifndef _ENGINE_BASE_H_
        #define _ENGINE_BASE_H_
        
        #include <QtCore/QObject>
        #include <QtCore/QString>
        
        #include "mediaitem.h"
        
        namespace ENGINE {
          enum E_ENGINE_STATE {PLAYING, PAUSED, STOPPED, ERROR};
        }
        
        namespace ENGINE {
          enum E_ENGINE_TYPE 
          {
              NO_ENGINE = 0, 
              PHONON,
              VLC,
              MPV,
              QTMULTIMEDIA
          };
        }
        
        class EngineBase : public QObject
        {
        Q_OBJECT
        Q_DISABLE_COPY( EngineBase )
          
        public:
            EngineBase();
            EngineBase(const QString& name);
        
            QString name() {return m_name;}
            QString version() {return m_version;}
            
            ENGINE::E_ENGINE_TYPE type() {return m_type;}
            bool isEngineOK() {return m_isEngineOK;}    
        
            /* play/pause/stop */
            virtual void play()  {};
            virtual void pause() {};
            virtual void stop();
            
            /* media management*/
            virtual void setMediaItem(MEDIA::TrackPtr ) {};
            virtual void setNextMediaItem(MEDIA::TrackPtr ) {};
            MEDIA::TrackPtr playingTrack() const {return m_currentMediaItem;}
            MEDIA::TrackPtr nextTrack() const {return m_nextMediaItem;}
            
            /* audio*/ 
            virtual int maxVolume() const {return 100;};
            virtual int volume() const {return 0;};
            virtual void setVolume(const int &) {};
            virtual bool isMuted() const {return false;};
            virtual void setMuted( bool ) {};
        
            /* state & behavior */
            ENGINE::E_ENGINE_STATE state() const {return m_current_state;};
            static QString stateToString(ENGINE::E_ENGINE_STATE state);
            
            /* time */
            qint64 currentTime() const {return m_lastTick;}
            qint64 currentTotalTime() const {return m_totalTime;}
            virtual void seek( qint64 ) {};
        
            /* effect */
            virtual bool isEqualizerAvailable() { return false;};
            virtual void addEqualizer() {};
            virtual void removeEqualizer() {};
            virtual void applyEqualizer(QList<int>) {};
            
        public slots:
            virtual void volumeMute( ) {};
            virtual void volumeInc( ) {};
            virtual void volumeDec( ) {};
            
        public:
            bool                    m_isEngineOK;
            ENGINE::E_ENGINE_STATE  m_current_state;
            ENGINE::E_ENGINE_STATE  m_old_state;
            
            /* playing media properties */    
            qint64                  m_totalTime;
            bool                    m_aboutToFinishEmitted;
            qint32                  m_tickInterval;
            qint64                  m_lastTick;
            
            MEDIA::TrackPtr         m_currentMediaItem;
            MEDIA::TrackPtr         m_nextMediaItem;
            
        signals:
            void mediaChanged();
            void mediaMetaDataChanged();
            void mediaAboutToFinish();
            void mediaFinished();
            void mediaTick(qint64 time);
            void mediaTotalTimeChanged(qint64 newTotalTime);
            void mediaSeekableChanged(bool);
            
            void engineQueueFinished();
            void engineStateChanged();
            void engineRequestStop();
            
            void volumeChanged();
            void muteStateChanged();
            
            
        protected :
            QString                 m_name;
            QString                 m_version;
            ENGINE::E_ENGINE_TYPE   m_type;
        };
        
        Q_DECLARE_INTERFACE(EngineBase, "yarock.EngineBase/1.0")
        
        #endif // _ENGINE_BASE_H_
        

        Adding it in engine doesn't help:

        #ifndef _ENGINE_H_
        #define _ENGINE_H_
        
        #include <QtCore/QObject>
        #include <QtCore/QString>
        
        #include "engine_base.h"
        
        class Engine : public QObject
        {
            Q_OBJECT
            static EngineBase         *CORE_INSTANCE;
        
        public:
            Engine();
            static EngineBase* instance() { return CORE_INSTANCE; }
        
            QString error() { return m_error;}
        
            static ENGINE::E_ENGINE_TYPE activeEngine();
        
        private:
            QString m_error;
        };
        
        #endif // _ENGINE_H_
        

        Thanks!

        JonBJ 1 Reply Last reply
        0
        • sebaroS sebaro

          @sierdzio

          The symbol is from engine_base which has the macro:

          #ifndef _ENGINE_BASE_H_
          #define _ENGINE_BASE_H_
          
          #include <QtCore/QObject>
          #include <QtCore/QString>
          
          #include "mediaitem.h"
          
          namespace ENGINE {
            enum E_ENGINE_STATE {PLAYING, PAUSED, STOPPED, ERROR};
          }
          
          namespace ENGINE {
            enum E_ENGINE_TYPE 
            {
                NO_ENGINE = 0, 
                PHONON,
                VLC,
                MPV,
                QTMULTIMEDIA
            };
          }
          
          class EngineBase : public QObject
          {
          Q_OBJECT
          Q_DISABLE_COPY( EngineBase )
            
          public:
              EngineBase();
              EngineBase(const QString& name);
          
              QString name() {return m_name;}
              QString version() {return m_version;}
              
              ENGINE::E_ENGINE_TYPE type() {return m_type;}
              bool isEngineOK() {return m_isEngineOK;}    
          
              /* play/pause/stop */
              virtual void play()  {};
              virtual void pause() {};
              virtual void stop();
              
              /* media management*/
              virtual void setMediaItem(MEDIA::TrackPtr ) {};
              virtual void setNextMediaItem(MEDIA::TrackPtr ) {};
              MEDIA::TrackPtr playingTrack() const {return m_currentMediaItem;}
              MEDIA::TrackPtr nextTrack() const {return m_nextMediaItem;}
              
              /* audio*/ 
              virtual int maxVolume() const {return 100;};
              virtual int volume() const {return 0;};
              virtual void setVolume(const int &) {};
              virtual bool isMuted() const {return false;};
              virtual void setMuted( bool ) {};
          
              /* state & behavior */
              ENGINE::E_ENGINE_STATE state() const {return m_current_state;};
              static QString stateToString(ENGINE::E_ENGINE_STATE state);
              
              /* time */
              qint64 currentTime() const {return m_lastTick;}
              qint64 currentTotalTime() const {return m_totalTime;}
              virtual void seek( qint64 ) {};
          
              /* effect */
              virtual bool isEqualizerAvailable() { return false;};
              virtual void addEqualizer() {};
              virtual void removeEqualizer() {};
              virtual void applyEqualizer(QList<int>) {};
              
          public slots:
              virtual void volumeMute( ) {};
              virtual void volumeInc( ) {};
              virtual void volumeDec( ) {};
              
          public:
              bool                    m_isEngineOK;
              ENGINE::E_ENGINE_STATE  m_current_state;
              ENGINE::E_ENGINE_STATE  m_old_state;
              
              /* playing media properties */    
              qint64                  m_totalTime;
              bool                    m_aboutToFinishEmitted;
              qint32                  m_tickInterval;
              qint64                  m_lastTick;
              
              MEDIA::TrackPtr         m_currentMediaItem;
              MEDIA::TrackPtr         m_nextMediaItem;
              
          signals:
              void mediaChanged();
              void mediaMetaDataChanged();
              void mediaAboutToFinish();
              void mediaFinished();
              void mediaTick(qint64 time);
              void mediaTotalTimeChanged(qint64 newTotalTime);
              void mediaSeekableChanged(bool);
              
              void engineQueueFinished();
              void engineStateChanged();
              void engineRequestStop();
              
              void volumeChanged();
              void muteStateChanged();
              
              
          protected :
              QString                 m_name;
              QString                 m_version;
              ENGINE::E_ENGINE_TYPE   m_type;
          };
          
          Q_DECLARE_INTERFACE(EngineBase, "yarock.EngineBase/1.0")
          
          #endif // _ENGINE_BASE_H_
          

          Adding it in engine doesn't help:

          #ifndef _ENGINE_H_
          #define _ENGINE_H_
          
          #include <QtCore/QObject>
          #include <QtCore/QString>
          
          #include "engine_base.h"
          
          class Engine : public QObject
          {
              Q_OBJECT
              static EngineBase         *CORE_INSTANCE;
          
          public:
              Engine();
              static EngineBase* instance() { return CORE_INSTANCE; }
          
              QString error() { return m_error;}
          
              static ENGINE::E_ENGINE_TYPE activeEngine();
          
          private:
              QString m_error;
          };
          
          #endif // _ENGINE_H_
          

          Thanks!

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

          @sebaro
          Just make sure you have done an absolutely full, clean rebuild. Best is to actually delete the build output (not the source!) directory completely and then do a complete rebuild. Spend a couple of minutes verifying that before continuing.

          sebaroS 1 Reply Last reply
          1
          • JonBJ JonB

            @sebaro
            Just make sure you have done an absolutely full, clean rebuild. Best is to actually delete the build output (not the source!) directory completely and then do a complete rebuild. Spend a couple of minutes verifying that before continuing.

            sebaroS Offline
            sebaroS Offline
            sebaro
            wrote on last edited by
            #5

            @JonB

            I use a build directory, and I clean it after each code change:

            cd build
            cmake ..
            make
            

            I replaced/removed deprecated and obsolete class members and changed the main and plugin cmake files:

            CMakeLists.txt

            # ------------------------------------------------------------------------------
            #  YAROCK CMAKE FILE
            # ------------------------------------------------------------------------------
            cmake_minimum_required(VERSION 3.16)
            set(CMAKE_CXX_STANDARD 17)
            set(CMAKE_CXX_STANDARD_REQUIRED ON)
            set(CMAKE_CXX_EXTENSIONS OFF)
            set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake )
            
            PROJECT( yarock )
            set(YAROCK_MAJOR_VERSION 1)
            set(YAROCK_MINOR_VERSION 5)
            set(YAROCK_PATCH_VERSION 0)
            set(YAROCK_VERSION "${YAROCK_MAJOR_VERSION}.${YAROCK_MINOR_VERSION}.${YAROCK_PATCH_VERSION}")
            
            # ------------------------------------------------------------------------------
            #  build def
            # ------------------------------------------------------------------------------
            #ADD_DEFINITIONS( -DTEST_FLAG )
            ADD_DEFINITIONS(-Wall -Wextra )
            
            # ------------------------------------------------------------------------------
            #  OPTION
            # ------------------------------------------------------------------------------
            # Since yarock 1.1.5 change default audio engine to VLC
            OPTION(ENABLE_PHONON "Enable/disable Phonon audio engine" OFF)
            OPTION(ENABLE_VLC "Enable/disable VLC audio engine" OFF)
            OPTION(ENABLE_MPV "Enable/disable MPV audio engine" ON)
            # OPTION(ENABLE_QTMULTIMEDIA "Enable/disable QtMultimedia audio engine" OFF)
            OPTION(ENABLE_SHORTCUT "Enable/disable global shortcut manager" OFF)
            
            # ------------------------------------------------------------------------------
            #  EXTERNAL PACKAGE
            # ------------------------------------------------------------------------------
            
            #---- Qt ----
            set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${Qt6Widgets_EXECUTABLE_COMPILE_FLAGS}")
            find_package(Qt6Gui REQUIRED)
            find_package(Qt6Widgets REQUIRED)
            find_package(Qt6Xml REQUIRED)
            find_package(Qt6Network REQUIRED)
            find_package(Qt6Concurrent REQUIRED)
            find_package(Qt6DBus REQUIRED)
            find_package(Qt6Sql REQUIRED)
            find_package(Qt6LinguistTools REQUIRED)
            set (QTLIBS ${Qt6Core_LIBRARIES}
                        ${Qt6Gui_LIBRARIES}
                        ${Qt6Widgets_LIBRARIES}
                        ${Qt6Network_LIBRARIES}
                        ${Qt6Xml_LIBRARIES}
                        ${Qt6Concurrent_LIBRARIES}
                        ${Qt6DBus_LIBRARIES}
                        ${Qt6Sql_LIBRARIES})
            set (QTINCLUDES ${Qt6Core_INCLUDE_DIRS}
                            ${Qt6Gui_INCLUDE_DIRS}
                            ${Qt6Widgets_INCLUDE_DIRS}
                            ${Qt6Network_INCLUDE_DIRS}
                            ${Qt6Xml_INCLUDE_DIRS}
                            ${Qt6Concurrent_INCLUDE_DIRS}
                            ${Qt6DBus_INCLUDE_DIRS}
                            ${Qt6Sql_INCLUDE_DIRS})
            add_definitions( ${Qt6Core_DEFINITIONS}
                             ${Qt6Widgets_DEFINITIONS}
                             ${Qt6Network_DEFINITIONS}
                             ${Qt6Xml_DEFINITIONS}
                             ${Qt6Concurrent_DEFINITIONS})
            qt_standard_project_setup()
            
            # ---- Taglib ----
            find_package( Taglib 1.6.0 REQUIRED )
            if(TAGLIB_FOUND)
                include(CheckTagLibFileName)
                check_taglib_filename(COMPLEX_TAGLIB_FILENAME)
            endif (TAGLIB_FOUND)
            
            # ---- Htmlcxx ----
            find_package( HtmlCxx )
            
            # ------------------------------------------------------------------------------
            #  INCLUDES
            # ------------------------------------------------------------------------------
            INCLUDE_DIRECTORIES( ${QTINCLUDES} )
            INCLUDE_DIRECTORIES( ${TAGLIB_INCLUDES} )
            INCLUDE_DIRECTORIES( ${HTMLCXX_INCLUDE_DIRS} )
            
            # ------------------------------------------------------------------------------
            #  SUBDIRECTORIES
            # ------------------------------------------------------------------------------
            # global shortcut
            if(ENABLE_SHORTCUT)
              add_definitions(-DENABLE_SHORTCUT)
            
              add_subdirectory(src/shortcuts)
            
              INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/src/shortcuts)
            
              set(LIB_INTERNAL_STATIC_SHORTCUT yarock_shortchut)
            
            endif(ENABLE_SHORTCUT)
            
            # ------------------------------------------------------------------------------
            #  INSTALL DIRECTORIES
            # ------------------------------------------------------------------------------
            if (CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
               set (CMAKE_INSTALL_PREFIX /usr CACHE PATH "default install path" FORCE )
            endif()
            
            set(CMAKE_INSTALL_BIN          "${CMAKE_INSTALL_PREFIX}/bin"         CACHE PATH "binaries install path" FORCE)
            set(CMAKE_INSTALL_LIB          "${CMAKE_INSTALL_PREFIX}/lib${LIB_SUFFIX}/yarock"  CACHE PATH "libraries install path" FORCE)
            set(CMAKE_INSTALL_TRANS        "${CMAKE_INSTALL_PREFIX}/share/yarock/translations"  CACHE PATH "translations install path" FORCE)
            
            # ------------------------------------------------------------------------------
            #  CONFIGURE FILES
            # ------------------------------------------------------------------------------
            configure_file(${CMAKE_CURRENT_SOURCE_DIR}/src/config.h.in
                           ${CMAKE_CURRENT_BINARY_DIR}/config.h)
            
            # ------------------------------------------------------------------------------
            #  SOURCES
            # ------------------------------------------------------------------------------
            add_subdirectory(src)
            
            MESSAGE(STATUS "Audio Engine Vlc.................................................  " ${ENABLE_VLC} " [use cmake .. -DENABLE_VLC=ON/OFF]" )
            if (ENABLE_VLC)
              add_definitions(-DENABLE_VLC)
              add_subdirectory(src/core/player/vlc)
            endif (ENABLE_VLC)
            
            MESSAGE(STATUS "Audio Engine Mpv.................................................  " ${ENABLE_MPV} " [use cmake .. -DENABLE_MPV=ON/OFF]")
            if (ENABLE_MPV)
              add_definitions(-DENABLE_MPV)
              add_subdirectory(src/core/player/mpv)
            endif (ENABLE_MPV)
            
            MESSAGE(STATUS "Audio Engine Phonon..............................................  " ${ENABLE_PHONON} " [use cmake .. -DENABLE_PHONON=ON/OFF]")
            if (ENABLE_PHONON)
              add_definitions(-DENABLE_PHONON)
              add_subdirectory(src/core/player/phonon)
            endif (ENABLE_PHONON)
            
            # MESSAGE(STATUS "Audio Engine QtMultimedia........................................  " ${ENABLE_QTMULTIMEDIA} " [use cmake .. -DENABLE_QTMULTIMEDIA=ON/OFF]")
            # if (ENABLE_QTMULTIMEDIA)
            #     if (ENABLE_QT5)
            #       add_definitions(-DENABLE_QTMULTIMEDIA)
            #       add_subdirectory(src/core/player/qtmultimedia)
            #     else (ENABLE_QT5)
            #       MESSAGE(WARNING "QtMultimedia can be set with QT5")
            #     endif (ENABLE_QT5)
            # endif (ENABLE_QTMULTIMEDIA)
            
            INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR})
            INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR})
            INCLUDE_DIRECTORIES(${CMAKE_BINARY_DIR})
            INCLUDE_DIRECTORIES(${YAROCK_INCLUDES})
            
            # ------------------------------------------------------------------------------
            #  RESSOURCE
            # ------------------------------------------------------------------------------
            SET(YAROCK_RESOURCES yarock.qrc)
            
            QT6_ADD_RESOURCES(YAROCK_RESOURCES_RCC ${YAROCK_RESOURCES})
            
            # ------------------------------------------------------------------------------
            #  DBUS
            # ------------------------------------------------------------------------------
            # MPRIS 2.0 DBUS interfaces
            qt6_add_dbus_adaptor(YAROCK_SOURCES
                 src/dbus/org.mpris.MediaPlayer2.Player.xml
                 src/dbus/mpris2.h Mpris2 mpris2Player Mpris2Player)
            qt6_add_dbus_adaptor(YAROCK_SOURCES
                 src/dbus/org.mpris.MediaPlayer2.xml
                 src/dbus/mpris2.h Mpris2 mpris2Root Mpris2Root)
            
            # ------------------------------------------------------------------------------
            #  TRANSLATION
            # ------------------------------------------------------------------------------
            # Handle Translations, take all * files from trans directory.
            file( GLOB TRANS_FILES ${CMAKE_SOURCE_DIR}/translation/yarock_*.ts)
            set(TS_FILES ${TRANS_FILES})
            
            SET(UPDATE_TRANSLATIONS OFF) # no ts update
            #SET(UPDATE_TRANSLATIONS ON) # ts update
            
            option (UPDATE_TRANSLATIONS "Update source translation ../translation/*.ts files")
            set (FILES_TO_TRANSLATE ${FILES_TO_TRANSLATE} ${YAROCK_SOURCES})
            
            if (UPDATE_TRANSLATIONS)
              QT6_CREATE_TRANSLATION(YAROCK_QM_FILES ${FILES_TO_TRANSLATE} ${TS_FILES})
            else (UPDATE_TRANSLATIONS)
              QT6_ADD_TRANSLATION(YAROCK_QM_FILES ${TS_FILES})
            endif (UPDATE_TRANSLATIONS)
            
            # ------------------------------------------------------------------------------
            #  BUILDING
            # ------------------------------------------------------------------------------
            set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall")
            set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Woverloaded-virtual -Wall -Wno-sign-compare")
            
            ADD_EXECUTABLE(yarock ${YAROCK_SOURCES} ${YAROCK_RESOURCES_RCC} ${YAROCK_QM_FILES})
            
            SET_TARGET_PROPERTIES(yarock PROPERTIES AUTOMOC TRUE)
            
            SET_PROPERTY(TARGET  ${LIB_INTERNAL_STATIC_SHORTCUT} PROPERTY IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/shortcuts)
            
            if(ENABLE_SHORTCUT)
              TARGET_LINK_LIBRARIES(yarock ${LIB_INTERNAL_STATIC_SHORTCUT})
            endif(ENABLE_SHORTCUT)
            
            TARGET_LINK_LIBRARIES(yarock
              X11
              ${QTLIBS}
              ${TAGLIB_LIBRARIES}
              ${HTMLCXX_LIBRARIES}
            )
            
            # ------------------------------------------------------------------------------
            #  INSTALL
            # ------------------------------------------------------------------------------
            # -- install binary file
            install( TARGETS yarock DESTINATION ${CMAKE_INSTALL_BIN} )
            
            # -- install translations files
            install(FILES ${YAROCK_QM_FILES} DESTINATION "${CMAKE_INSTALL_PREFIX}/share/yarock/translations")
            
            # -- install destop file
            install(FILES data/org.yarock.desktop  DESTINATION "${CMAKE_INSTALL_PREFIX}/share/applications" )
            
            # -- install appdata file
            install(FILES data/org.yarock.appdata.xml  DESTINATION "${CMAKE_INSTALL_PREFIX}/share/appdata" )
            
            # -- install icons files
            INSTALL( FILES ${CMAKE_SOURCE_DIR}/icon/yarock_16x16.png DESTINATION "${CMAKE_INSTALL_PREFIX}/share/icons/hicolor/16x16/apps" RENAME application-x-yarock.png)
            INSTALL( FILES ${CMAKE_SOURCE_DIR}/icon/yarock_32x32.png DESTINATION "${CMAKE_INSTALL_PREFIX}/share/icons/hicolor/32x32/apps" RENAME application-x-yarock.png)
            INSTALL( FILES ${CMAKE_SOURCE_DIR}/icon/yarock_48x48.png DESTINATION "${CMAKE_INSTALL_PREFIX}/share/icons/hicolor/48x48/apps" RENAME application-x-yarock.png)
            INSTALL( FILES ${CMAKE_SOURCE_DIR}/icon/yarock_64x64.png DESTINATION "${CMAKE_INSTALL_PREFIX}/share/icons/hicolor/64x64/apps" RENAME application-x-yarock.png)
            INSTALL( FILES ${CMAKE_SOURCE_DIR}/icon/yarock_128x128.png DESTINATION "${CMAKE_INSTALL_PREFIX}/share/icons/hicolor/128x128/apps" RENAME application-x-yarock.png)
            INSTALL( FILES ${CMAKE_SOURCE_DIR}/icon/yarock.svg DESTINATION "${CMAKE_INSTALL_PREFIX}/share/icons/hicolor/scalable/apps" RENAME application-x-yarock.svg)
            INSTALL( FILES ${CMAKE_SOURCE_DIR}/icon/yarock_48x48.png DESTINATION "${CMAKE_INSTALL_PREFIX}/share/pixmaps/" RENAME application-x-yarock.png)
            
            # ------------------------------------------------------------------------------
            #  UN-INSTALL SUPPORT
            # ------------------------------------------------------------------------------
            

            src/core/player/mpv/CMakeLists.txt

            # ------------------------------------------------------------------------------
            #  MPV PLUGIN CMAKE FILE
            # ------------------------------------------------------------------------------
            cmake_minimum_required(VERSION 3.16)
            set(CMAKE_CXX_STANDARD 17)
            set(CMAKE_CXX_STANDARD_REQUIRED ON)
            set(CMAKE_CXX_EXTENSIONS OFF)
            
            project(enginempv)
            # ------------------------------------------------------------------------------
            #  build def (QT PLUGIN)
            # ------------------------------------------------------------------------------
            ADD_DEFINITIONS( -Wall )
            ADD_DEFINITIONS(-DQT_PLUGIN)
            ADD_DEFINITIONS(-DQT_NO_DEBUG)
            ADD_DEFINITIONS(-DQT_SHARED)
            ADD_DEFINITIONS(-DQT_THREAD)
            
            
            ADD_DEFINITIONS( -DENABLE_MPV )
            
            # ------------------------------------------------------------------------------
            #  EXTERNAL LIB
            # ------------------------------------------------------------------------------
            FIND_PACKAGE( LIBMPV REQUIRED)
            
            
            # ------------------------------------------------------------------------------
            #  INCLUDES
            # ------------------------------------------------------------------------------
            INCLUDE_DIRECTORIES( ${CMAKE_CURRENT_SOURCE_DIR}/../../../../src/core/player/
                                 ${CMAKE_CURRENT_SOURCE_DIR}/../../../../src/core/player/mpv
                                 ${CMAKE_CURRENT_SOURCE_DIR}/../../../../src/core/mediaitem
                                 ${CMAKE_CURRENT_SOURCE_DIR}/../../../../src
            )
            
            INCLUDE_DIRECTORIES( ${LIBMPV_INCLUDE_DIR} )
            
            set (QTLIBS ${Qt6Core_LIBRARIES})
            set (QTINCLUDES ${Qt6Core_INCLUDE_DIRS})
            add_definitions( ${Qt6Core_DEFINITIONS})
            qt_standard_project_setup()
            
            INCLUDE_DIRECTORIES( ${QTINCLUDES} )
            
            # ------------------------------------------------------------------------------
            #  SOURCES
            # ------------------------------------------------------------------------------
            SET(SOURCES
                ${CMAKE_CURRENT_SOURCE_DIR}/../../../../src/core/player/mpv/engine_mpv.cpp
            )
            
            # ------------------------------------------------------------------------------
            #  BUILDING
            # ------------------------------------------------------------------------------
            set( CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib )
            
            ADD_LIBRARY( enginempv SHARED ${SOURCES} )
            
            SET_TARGET_PROPERTIES(enginempv PROPERTIES AUTOMOC TRUE)
            
            ADD_DEPENDENCIES(enginempv yarock)
            
            TARGET_LINK_LIBRARIES(enginempv ${LIBMPV_LIBRARY} ${QTLIBS})
            
            # ------------------------------------------------------------------------------
            #  INSTALL
            # ------------------------------------------------------------------------------
            if (CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
               set (CMAKE_INSTALL_PREFIX /usr CACHE PATH "default install path" FORCE )
            endif()
            
            set(CMAKE_INSTALL_LIB "${CMAKE_INSTALL_PREFIX}/lib${LIB_SUFFIX}/yarock"  CACHE PATH "libraries installation path" FORCE)
            
            install(TARGETS enginempv DESTINATION ${CMAKE_INSTALL_LIB} )
            

            I still think has something to do with the c++-17 standard, if I add these in the old code (qt5) I get the same undefined symbol:

            set(CMAKE_CXX_STANDARD 17)
            set(CMAKE_CXX_STANDARD_REQUIRED ON)
            set(CMAKE_CXX_EXTENSIONS OFF)
            

            Thanks

            JonBJ sierdzioS 2 Replies Last reply
            0
            • sebaroS sebaro

              @JonB

              I use a build directory, and I clean it after each code change:

              cd build
              cmake ..
              make
              

              I replaced/removed deprecated and obsolete class members and changed the main and plugin cmake files:

              CMakeLists.txt

              # ------------------------------------------------------------------------------
              #  YAROCK CMAKE FILE
              # ------------------------------------------------------------------------------
              cmake_minimum_required(VERSION 3.16)
              set(CMAKE_CXX_STANDARD 17)
              set(CMAKE_CXX_STANDARD_REQUIRED ON)
              set(CMAKE_CXX_EXTENSIONS OFF)
              set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake )
              
              PROJECT( yarock )
              set(YAROCK_MAJOR_VERSION 1)
              set(YAROCK_MINOR_VERSION 5)
              set(YAROCK_PATCH_VERSION 0)
              set(YAROCK_VERSION "${YAROCK_MAJOR_VERSION}.${YAROCK_MINOR_VERSION}.${YAROCK_PATCH_VERSION}")
              
              # ------------------------------------------------------------------------------
              #  build def
              # ------------------------------------------------------------------------------
              #ADD_DEFINITIONS( -DTEST_FLAG )
              ADD_DEFINITIONS(-Wall -Wextra )
              
              # ------------------------------------------------------------------------------
              #  OPTION
              # ------------------------------------------------------------------------------
              # Since yarock 1.1.5 change default audio engine to VLC
              OPTION(ENABLE_PHONON "Enable/disable Phonon audio engine" OFF)
              OPTION(ENABLE_VLC "Enable/disable VLC audio engine" OFF)
              OPTION(ENABLE_MPV "Enable/disable MPV audio engine" ON)
              # OPTION(ENABLE_QTMULTIMEDIA "Enable/disable QtMultimedia audio engine" OFF)
              OPTION(ENABLE_SHORTCUT "Enable/disable global shortcut manager" OFF)
              
              # ------------------------------------------------------------------------------
              #  EXTERNAL PACKAGE
              # ------------------------------------------------------------------------------
              
              #---- Qt ----
              set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${Qt6Widgets_EXECUTABLE_COMPILE_FLAGS}")
              find_package(Qt6Gui REQUIRED)
              find_package(Qt6Widgets REQUIRED)
              find_package(Qt6Xml REQUIRED)
              find_package(Qt6Network REQUIRED)
              find_package(Qt6Concurrent REQUIRED)
              find_package(Qt6DBus REQUIRED)
              find_package(Qt6Sql REQUIRED)
              find_package(Qt6LinguistTools REQUIRED)
              set (QTLIBS ${Qt6Core_LIBRARIES}
                          ${Qt6Gui_LIBRARIES}
                          ${Qt6Widgets_LIBRARIES}
                          ${Qt6Network_LIBRARIES}
                          ${Qt6Xml_LIBRARIES}
                          ${Qt6Concurrent_LIBRARIES}
                          ${Qt6DBus_LIBRARIES}
                          ${Qt6Sql_LIBRARIES})
              set (QTINCLUDES ${Qt6Core_INCLUDE_DIRS}
                              ${Qt6Gui_INCLUDE_DIRS}
                              ${Qt6Widgets_INCLUDE_DIRS}
                              ${Qt6Network_INCLUDE_DIRS}
                              ${Qt6Xml_INCLUDE_DIRS}
                              ${Qt6Concurrent_INCLUDE_DIRS}
                              ${Qt6DBus_INCLUDE_DIRS}
                              ${Qt6Sql_INCLUDE_DIRS})
              add_definitions( ${Qt6Core_DEFINITIONS}
                               ${Qt6Widgets_DEFINITIONS}
                               ${Qt6Network_DEFINITIONS}
                               ${Qt6Xml_DEFINITIONS}
                               ${Qt6Concurrent_DEFINITIONS})
              qt_standard_project_setup()
              
              # ---- Taglib ----
              find_package( Taglib 1.6.0 REQUIRED )
              if(TAGLIB_FOUND)
                  include(CheckTagLibFileName)
                  check_taglib_filename(COMPLEX_TAGLIB_FILENAME)
              endif (TAGLIB_FOUND)
              
              # ---- Htmlcxx ----
              find_package( HtmlCxx )
              
              # ------------------------------------------------------------------------------
              #  INCLUDES
              # ------------------------------------------------------------------------------
              INCLUDE_DIRECTORIES( ${QTINCLUDES} )
              INCLUDE_DIRECTORIES( ${TAGLIB_INCLUDES} )
              INCLUDE_DIRECTORIES( ${HTMLCXX_INCLUDE_DIRS} )
              
              # ------------------------------------------------------------------------------
              #  SUBDIRECTORIES
              # ------------------------------------------------------------------------------
              # global shortcut
              if(ENABLE_SHORTCUT)
                add_definitions(-DENABLE_SHORTCUT)
              
                add_subdirectory(src/shortcuts)
              
                INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/src/shortcuts)
              
                set(LIB_INTERNAL_STATIC_SHORTCUT yarock_shortchut)
              
              endif(ENABLE_SHORTCUT)
              
              # ------------------------------------------------------------------------------
              #  INSTALL DIRECTORIES
              # ------------------------------------------------------------------------------
              if (CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
                 set (CMAKE_INSTALL_PREFIX /usr CACHE PATH "default install path" FORCE )
              endif()
              
              set(CMAKE_INSTALL_BIN          "${CMAKE_INSTALL_PREFIX}/bin"         CACHE PATH "binaries install path" FORCE)
              set(CMAKE_INSTALL_LIB          "${CMAKE_INSTALL_PREFIX}/lib${LIB_SUFFIX}/yarock"  CACHE PATH "libraries install path" FORCE)
              set(CMAKE_INSTALL_TRANS        "${CMAKE_INSTALL_PREFIX}/share/yarock/translations"  CACHE PATH "translations install path" FORCE)
              
              # ------------------------------------------------------------------------------
              #  CONFIGURE FILES
              # ------------------------------------------------------------------------------
              configure_file(${CMAKE_CURRENT_SOURCE_DIR}/src/config.h.in
                             ${CMAKE_CURRENT_BINARY_DIR}/config.h)
              
              # ------------------------------------------------------------------------------
              #  SOURCES
              # ------------------------------------------------------------------------------
              add_subdirectory(src)
              
              MESSAGE(STATUS "Audio Engine Vlc.................................................  " ${ENABLE_VLC} " [use cmake .. -DENABLE_VLC=ON/OFF]" )
              if (ENABLE_VLC)
                add_definitions(-DENABLE_VLC)
                add_subdirectory(src/core/player/vlc)
              endif (ENABLE_VLC)
              
              MESSAGE(STATUS "Audio Engine Mpv.................................................  " ${ENABLE_MPV} " [use cmake .. -DENABLE_MPV=ON/OFF]")
              if (ENABLE_MPV)
                add_definitions(-DENABLE_MPV)
                add_subdirectory(src/core/player/mpv)
              endif (ENABLE_MPV)
              
              MESSAGE(STATUS "Audio Engine Phonon..............................................  " ${ENABLE_PHONON} " [use cmake .. -DENABLE_PHONON=ON/OFF]")
              if (ENABLE_PHONON)
                add_definitions(-DENABLE_PHONON)
                add_subdirectory(src/core/player/phonon)
              endif (ENABLE_PHONON)
              
              # MESSAGE(STATUS "Audio Engine QtMultimedia........................................  " ${ENABLE_QTMULTIMEDIA} " [use cmake .. -DENABLE_QTMULTIMEDIA=ON/OFF]")
              # if (ENABLE_QTMULTIMEDIA)
              #     if (ENABLE_QT5)
              #       add_definitions(-DENABLE_QTMULTIMEDIA)
              #       add_subdirectory(src/core/player/qtmultimedia)
              #     else (ENABLE_QT5)
              #       MESSAGE(WARNING "QtMultimedia can be set with QT5")
              #     endif (ENABLE_QT5)
              # endif (ENABLE_QTMULTIMEDIA)
              
              INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR})
              INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR})
              INCLUDE_DIRECTORIES(${CMAKE_BINARY_DIR})
              INCLUDE_DIRECTORIES(${YAROCK_INCLUDES})
              
              # ------------------------------------------------------------------------------
              #  RESSOURCE
              # ------------------------------------------------------------------------------
              SET(YAROCK_RESOURCES yarock.qrc)
              
              QT6_ADD_RESOURCES(YAROCK_RESOURCES_RCC ${YAROCK_RESOURCES})
              
              # ------------------------------------------------------------------------------
              #  DBUS
              # ------------------------------------------------------------------------------
              # MPRIS 2.0 DBUS interfaces
              qt6_add_dbus_adaptor(YAROCK_SOURCES
                   src/dbus/org.mpris.MediaPlayer2.Player.xml
                   src/dbus/mpris2.h Mpris2 mpris2Player Mpris2Player)
              qt6_add_dbus_adaptor(YAROCK_SOURCES
                   src/dbus/org.mpris.MediaPlayer2.xml
                   src/dbus/mpris2.h Mpris2 mpris2Root Mpris2Root)
              
              # ------------------------------------------------------------------------------
              #  TRANSLATION
              # ------------------------------------------------------------------------------
              # Handle Translations, take all * files from trans directory.
              file( GLOB TRANS_FILES ${CMAKE_SOURCE_DIR}/translation/yarock_*.ts)
              set(TS_FILES ${TRANS_FILES})
              
              SET(UPDATE_TRANSLATIONS OFF) # no ts update
              #SET(UPDATE_TRANSLATIONS ON) # ts update
              
              option (UPDATE_TRANSLATIONS "Update source translation ../translation/*.ts files")
              set (FILES_TO_TRANSLATE ${FILES_TO_TRANSLATE} ${YAROCK_SOURCES})
              
              if (UPDATE_TRANSLATIONS)
                QT6_CREATE_TRANSLATION(YAROCK_QM_FILES ${FILES_TO_TRANSLATE} ${TS_FILES})
              else (UPDATE_TRANSLATIONS)
                QT6_ADD_TRANSLATION(YAROCK_QM_FILES ${TS_FILES})
              endif (UPDATE_TRANSLATIONS)
              
              # ------------------------------------------------------------------------------
              #  BUILDING
              # ------------------------------------------------------------------------------
              set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall")
              set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Woverloaded-virtual -Wall -Wno-sign-compare")
              
              ADD_EXECUTABLE(yarock ${YAROCK_SOURCES} ${YAROCK_RESOURCES_RCC} ${YAROCK_QM_FILES})
              
              SET_TARGET_PROPERTIES(yarock PROPERTIES AUTOMOC TRUE)
              
              SET_PROPERTY(TARGET  ${LIB_INTERNAL_STATIC_SHORTCUT} PROPERTY IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/shortcuts)
              
              if(ENABLE_SHORTCUT)
                TARGET_LINK_LIBRARIES(yarock ${LIB_INTERNAL_STATIC_SHORTCUT})
              endif(ENABLE_SHORTCUT)
              
              TARGET_LINK_LIBRARIES(yarock
                X11
                ${QTLIBS}
                ${TAGLIB_LIBRARIES}
                ${HTMLCXX_LIBRARIES}
              )
              
              # ------------------------------------------------------------------------------
              #  INSTALL
              # ------------------------------------------------------------------------------
              # -- install binary file
              install( TARGETS yarock DESTINATION ${CMAKE_INSTALL_BIN} )
              
              # -- install translations files
              install(FILES ${YAROCK_QM_FILES} DESTINATION "${CMAKE_INSTALL_PREFIX}/share/yarock/translations")
              
              # -- install destop file
              install(FILES data/org.yarock.desktop  DESTINATION "${CMAKE_INSTALL_PREFIX}/share/applications" )
              
              # -- install appdata file
              install(FILES data/org.yarock.appdata.xml  DESTINATION "${CMAKE_INSTALL_PREFIX}/share/appdata" )
              
              # -- install icons files
              INSTALL( FILES ${CMAKE_SOURCE_DIR}/icon/yarock_16x16.png DESTINATION "${CMAKE_INSTALL_PREFIX}/share/icons/hicolor/16x16/apps" RENAME application-x-yarock.png)
              INSTALL( FILES ${CMAKE_SOURCE_DIR}/icon/yarock_32x32.png DESTINATION "${CMAKE_INSTALL_PREFIX}/share/icons/hicolor/32x32/apps" RENAME application-x-yarock.png)
              INSTALL( FILES ${CMAKE_SOURCE_DIR}/icon/yarock_48x48.png DESTINATION "${CMAKE_INSTALL_PREFIX}/share/icons/hicolor/48x48/apps" RENAME application-x-yarock.png)
              INSTALL( FILES ${CMAKE_SOURCE_DIR}/icon/yarock_64x64.png DESTINATION "${CMAKE_INSTALL_PREFIX}/share/icons/hicolor/64x64/apps" RENAME application-x-yarock.png)
              INSTALL( FILES ${CMAKE_SOURCE_DIR}/icon/yarock_128x128.png DESTINATION "${CMAKE_INSTALL_PREFIX}/share/icons/hicolor/128x128/apps" RENAME application-x-yarock.png)
              INSTALL( FILES ${CMAKE_SOURCE_DIR}/icon/yarock.svg DESTINATION "${CMAKE_INSTALL_PREFIX}/share/icons/hicolor/scalable/apps" RENAME application-x-yarock.svg)
              INSTALL( FILES ${CMAKE_SOURCE_DIR}/icon/yarock_48x48.png DESTINATION "${CMAKE_INSTALL_PREFIX}/share/pixmaps/" RENAME application-x-yarock.png)
              
              # ------------------------------------------------------------------------------
              #  UN-INSTALL SUPPORT
              # ------------------------------------------------------------------------------
              

              src/core/player/mpv/CMakeLists.txt

              # ------------------------------------------------------------------------------
              #  MPV PLUGIN CMAKE FILE
              # ------------------------------------------------------------------------------
              cmake_minimum_required(VERSION 3.16)
              set(CMAKE_CXX_STANDARD 17)
              set(CMAKE_CXX_STANDARD_REQUIRED ON)
              set(CMAKE_CXX_EXTENSIONS OFF)
              
              project(enginempv)
              # ------------------------------------------------------------------------------
              #  build def (QT PLUGIN)
              # ------------------------------------------------------------------------------
              ADD_DEFINITIONS( -Wall )
              ADD_DEFINITIONS(-DQT_PLUGIN)
              ADD_DEFINITIONS(-DQT_NO_DEBUG)
              ADD_DEFINITIONS(-DQT_SHARED)
              ADD_DEFINITIONS(-DQT_THREAD)
              
              
              ADD_DEFINITIONS( -DENABLE_MPV )
              
              # ------------------------------------------------------------------------------
              #  EXTERNAL LIB
              # ------------------------------------------------------------------------------
              FIND_PACKAGE( LIBMPV REQUIRED)
              
              
              # ------------------------------------------------------------------------------
              #  INCLUDES
              # ------------------------------------------------------------------------------
              INCLUDE_DIRECTORIES( ${CMAKE_CURRENT_SOURCE_DIR}/../../../../src/core/player/
                                   ${CMAKE_CURRENT_SOURCE_DIR}/../../../../src/core/player/mpv
                                   ${CMAKE_CURRENT_SOURCE_DIR}/../../../../src/core/mediaitem
                                   ${CMAKE_CURRENT_SOURCE_DIR}/../../../../src
              )
              
              INCLUDE_DIRECTORIES( ${LIBMPV_INCLUDE_DIR} )
              
              set (QTLIBS ${Qt6Core_LIBRARIES})
              set (QTINCLUDES ${Qt6Core_INCLUDE_DIRS})
              add_definitions( ${Qt6Core_DEFINITIONS})
              qt_standard_project_setup()
              
              INCLUDE_DIRECTORIES( ${QTINCLUDES} )
              
              # ------------------------------------------------------------------------------
              #  SOURCES
              # ------------------------------------------------------------------------------
              SET(SOURCES
                  ${CMAKE_CURRENT_SOURCE_DIR}/../../../../src/core/player/mpv/engine_mpv.cpp
              )
              
              # ------------------------------------------------------------------------------
              #  BUILDING
              # ------------------------------------------------------------------------------
              set( CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib )
              
              ADD_LIBRARY( enginempv SHARED ${SOURCES} )
              
              SET_TARGET_PROPERTIES(enginempv PROPERTIES AUTOMOC TRUE)
              
              ADD_DEPENDENCIES(enginempv yarock)
              
              TARGET_LINK_LIBRARIES(enginempv ${LIBMPV_LIBRARY} ${QTLIBS})
              
              # ------------------------------------------------------------------------------
              #  INSTALL
              # ------------------------------------------------------------------------------
              if (CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
                 set (CMAKE_INSTALL_PREFIX /usr CACHE PATH "default install path" FORCE )
              endif()
              
              set(CMAKE_INSTALL_LIB "${CMAKE_INSTALL_PREFIX}/lib${LIB_SUFFIX}/yarock"  CACHE PATH "libraries installation path" FORCE)
              
              install(TARGETS enginempv DESTINATION ${CMAKE_INSTALL_LIB} )
              

              I still think has something to do with the c++-17 standard, if I add these in the old code (qt5) I get the same undefined symbol:

              set(CMAKE_CXX_STANDARD 17)
              set(CMAKE_CXX_STANDARD_REQUIRED ON)
              set(CMAKE_CXX_EXTENSIONS OFF)
              

              Thanks

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

              @sebaro said in Qt6 porting, undefined symbol: _ZN10EngineBase16staticMetaObjectEHi:

              I clean it after each code change

              And precisely what does that mean? I suggested you delete the build output directory. If something like make clean that may not be good enough. Just saying, up to you.

              sebaroS 1 Reply Last reply
              0
              • JonBJ JonB

                @sebaro said in Qt6 porting, undefined symbol: _ZN10EngineBase16staticMetaObjectEHi:

                I clean it after each code change

                And precisely what does that mean? I suggested you delete the build output directory. If something like make clean that may not be good enough. Just saying, up to you.

                sebaroS Offline
                sebaroS Offline
                sebaro
                wrote on last edited by
                #7

                @JonB

                I delete the content of build directory, I don't use make clean. Every cmake/make is with an empty build directory.

                JonBJ 1 Reply Last reply
                1
                • sebaroS sebaro

                  @JonB

                  I delete the content of build directory, I don't use make clean. Every cmake/make is with an empty build directory.

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

                  @sebaro Fair enough.

                  Christian EhrlicherC 1 Reply Last reply
                  0
                  • JonBJ JonB

                    @sebaro Fair enough.

                    Christian EhrlicherC Offline
                    Christian EhrlicherC Offline
                    Christian Ehrlicher
                    Lifetime Qt Champion
                    wrote on last edited by
                    #9

                    Simplify your testcase until you find the bug or you can post it here.

                    Qt Online Installer direct download: https://download.qt.io/official_releases/online_installers/
                    Visit the Qt Academy at https://academy.qt.io/catalog

                    1 Reply Last reply
                    0
                    • sebaroS sebaro

                      @JonB

                      I use a build directory, and I clean it after each code change:

                      cd build
                      cmake ..
                      make
                      

                      I replaced/removed deprecated and obsolete class members and changed the main and plugin cmake files:

                      CMakeLists.txt

                      # ------------------------------------------------------------------------------
                      #  YAROCK CMAKE FILE
                      # ------------------------------------------------------------------------------
                      cmake_minimum_required(VERSION 3.16)
                      set(CMAKE_CXX_STANDARD 17)
                      set(CMAKE_CXX_STANDARD_REQUIRED ON)
                      set(CMAKE_CXX_EXTENSIONS OFF)
                      set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake )
                      
                      PROJECT( yarock )
                      set(YAROCK_MAJOR_VERSION 1)
                      set(YAROCK_MINOR_VERSION 5)
                      set(YAROCK_PATCH_VERSION 0)
                      set(YAROCK_VERSION "${YAROCK_MAJOR_VERSION}.${YAROCK_MINOR_VERSION}.${YAROCK_PATCH_VERSION}")
                      
                      # ------------------------------------------------------------------------------
                      #  build def
                      # ------------------------------------------------------------------------------
                      #ADD_DEFINITIONS( -DTEST_FLAG )
                      ADD_DEFINITIONS(-Wall -Wextra )
                      
                      # ------------------------------------------------------------------------------
                      #  OPTION
                      # ------------------------------------------------------------------------------
                      # Since yarock 1.1.5 change default audio engine to VLC
                      OPTION(ENABLE_PHONON "Enable/disable Phonon audio engine" OFF)
                      OPTION(ENABLE_VLC "Enable/disable VLC audio engine" OFF)
                      OPTION(ENABLE_MPV "Enable/disable MPV audio engine" ON)
                      # OPTION(ENABLE_QTMULTIMEDIA "Enable/disable QtMultimedia audio engine" OFF)
                      OPTION(ENABLE_SHORTCUT "Enable/disable global shortcut manager" OFF)
                      
                      # ------------------------------------------------------------------------------
                      #  EXTERNAL PACKAGE
                      # ------------------------------------------------------------------------------
                      
                      #---- Qt ----
                      set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${Qt6Widgets_EXECUTABLE_COMPILE_FLAGS}")
                      find_package(Qt6Gui REQUIRED)
                      find_package(Qt6Widgets REQUIRED)
                      find_package(Qt6Xml REQUIRED)
                      find_package(Qt6Network REQUIRED)
                      find_package(Qt6Concurrent REQUIRED)
                      find_package(Qt6DBus REQUIRED)
                      find_package(Qt6Sql REQUIRED)
                      find_package(Qt6LinguistTools REQUIRED)
                      set (QTLIBS ${Qt6Core_LIBRARIES}
                                  ${Qt6Gui_LIBRARIES}
                                  ${Qt6Widgets_LIBRARIES}
                                  ${Qt6Network_LIBRARIES}
                                  ${Qt6Xml_LIBRARIES}
                                  ${Qt6Concurrent_LIBRARIES}
                                  ${Qt6DBus_LIBRARIES}
                                  ${Qt6Sql_LIBRARIES})
                      set (QTINCLUDES ${Qt6Core_INCLUDE_DIRS}
                                      ${Qt6Gui_INCLUDE_DIRS}
                                      ${Qt6Widgets_INCLUDE_DIRS}
                                      ${Qt6Network_INCLUDE_DIRS}
                                      ${Qt6Xml_INCLUDE_DIRS}
                                      ${Qt6Concurrent_INCLUDE_DIRS}
                                      ${Qt6DBus_INCLUDE_DIRS}
                                      ${Qt6Sql_INCLUDE_DIRS})
                      add_definitions( ${Qt6Core_DEFINITIONS}
                                       ${Qt6Widgets_DEFINITIONS}
                                       ${Qt6Network_DEFINITIONS}
                                       ${Qt6Xml_DEFINITIONS}
                                       ${Qt6Concurrent_DEFINITIONS})
                      qt_standard_project_setup()
                      
                      # ---- Taglib ----
                      find_package( Taglib 1.6.0 REQUIRED )
                      if(TAGLIB_FOUND)
                          include(CheckTagLibFileName)
                          check_taglib_filename(COMPLEX_TAGLIB_FILENAME)
                      endif (TAGLIB_FOUND)
                      
                      # ---- Htmlcxx ----
                      find_package( HtmlCxx )
                      
                      # ------------------------------------------------------------------------------
                      #  INCLUDES
                      # ------------------------------------------------------------------------------
                      INCLUDE_DIRECTORIES( ${QTINCLUDES} )
                      INCLUDE_DIRECTORIES( ${TAGLIB_INCLUDES} )
                      INCLUDE_DIRECTORIES( ${HTMLCXX_INCLUDE_DIRS} )
                      
                      # ------------------------------------------------------------------------------
                      #  SUBDIRECTORIES
                      # ------------------------------------------------------------------------------
                      # global shortcut
                      if(ENABLE_SHORTCUT)
                        add_definitions(-DENABLE_SHORTCUT)
                      
                        add_subdirectory(src/shortcuts)
                      
                        INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/src/shortcuts)
                      
                        set(LIB_INTERNAL_STATIC_SHORTCUT yarock_shortchut)
                      
                      endif(ENABLE_SHORTCUT)
                      
                      # ------------------------------------------------------------------------------
                      #  INSTALL DIRECTORIES
                      # ------------------------------------------------------------------------------
                      if (CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
                         set (CMAKE_INSTALL_PREFIX /usr CACHE PATH "default install path" FORCE )
                      endif()
                      
                      set(CMAKE_INSTALL_BIN          "${CMAKE_INSTALL_PREFIX}/bin"         CACHE PATH "binaries install path" FORCE)
                      set(CMAKE_INSTALL_LIB          "${CMAKE_INSTALL_PREFIX}/lib${LIB_SUFFIX}/yarock"  CACHE PATH "libraries install path" FORCE)
                      set(CMAKE_INSTALL_TRANS        "${CMAKE_INSTALL_PREFIX}/share/yarock/translations"  CACHE PATH "translations install path" FORCE)
                      
                      # ------------------------------------------------------------------------------
                      #  CONFIGURE FILES
                      # ------------------------------------------------------------------------------
                      configure_file(${CMAKE_CURRENT_SOURCE_DIR}/src/config.h.in
                                     ${CMAKE_CURRENT_BINARY_DIR}/config.h)
                      
                      # ------------------------------------------------------------------------------
                      #  SOURCES
                      # ------------------------------------------------------------------------------
                      add_subdirectory(src)
                      
                      MESSAGE(STATUS "Audio Engine Vlc.................................................  " ${ENABLE_VLC} " [use cmake .. -DENABLE_VLC=ON/OFF]" )
                      if (ENABLE_VLC)
                        add_definitions(-DENABLE_VLC)
                        add_subdirectory(src/core/player/vlc)
                      endif (ENABLE_VLC)
                      
                      MESSAGE(STATUS "Audio Engine Mpv.................................................  " ${ENABLE_MPV} " [use cmake .. -DENABLE_MPV=ON/OFF]")
                      if (ENABLE_MPV)
                        add_definitions(-DENABLE_MPV)
                        add_subdirectory(src/core/player/mpv)
                      endif (ENABLE_MPV)
                      
                      MESSAGE(STATUS "Audio Engine Phonon..............................................  " ${ENABLE_PHONON} " [use cmake .. -DENABLE_PHONON=ON/OFF]")
                      if (ENABLE_PHONON)
                        add_definitions(-DENABLE_PHONON)
                        add_subdirectory(src/core/player/phonon)
                      endif (ENABLE_PHONON)
                      
                      # MESSAGE(STATUS "Audio Engine QtMultimedia........................................  " ${ENABLE_QTMULTIMEDIA} " [use cmake .. -DENABLE_QTMULTIMEDIA=ON/OFF]")
                      # if (ENABLE_QTMULTIMEDIA)
                      #     if (ENABLE_QT5)
                      #       add_definitions(-DENABLE_QTMULTIMEDIA)
                      #       add_subdirectory(src/core/player/qtmultimedia)
                      #     else (ENABLE_QT5)
                      #       MESSAGE(WARNING "QtMultimedia can be set with QT5")
                      #     endif (ENABLE_QT5)
                      # endif (ENABLE_QTMULTIMEDIA)
                      
                      INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR})
                      INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR})
                      INCLUDE_DIRECTORIES(${CMAKE_BINARY_DIR})
                      INCLUDE_DIRECTORIES(${YAROCK_INCLUDES})
                      
                      # ------------------------------------------------------------------------------
                      #  RESSOURCE
                      # ------------------------------------------------------------------------------
                      SET(YAROCK_RESOURCES yarock.qrc)
                      
                      QT6_ADD_RESOURCES(YAROCK_RESOURCES_RCC ${YAROCK_RESOURCES})
                      
                      # ------------------------------------------------------------------------------
                      #  DBUS
                      # ------------------------------------------------------------------------------
                      # MPRIS 2.0 DBUS interfaces
                      qt6_add_dbus_adaptor(YAROCK_SOURCES
                           src/dbus/org.mpris.MediaPlayer2.Player.xml
                           src/dbus/mpris2.h Mpris2 mpris2Player Mpris2Player)
                      qt6_add_dbus_adaptor(YAROCK_SOURCES
                           src/dbus/org.mpris.MediaPlayer2.xml
                           src/dbus/mpris2.h Mpris2 mpris2Root Mpris2Root)
                      
                      # ------------------------------------------------------------------------------
                      #  TRANSLATION
                      # ------------------------------------------------------------------------------
                      # Handle Translations, take all * files from trans directory.
                      file( GLOB TRANS_FILES ${CMAKE_SOURCE_DIR}/translation/yarock_*.ts)
                      set(TS_FILES ${TRANS_FILES})
                      
                      SET(UPDATE_TRANSLATIONS OFF) # no ts update
                      #SET(UPDATE_TRANSLATIONS ON) # ts update
                      
                      option (UPDATE_TRANSLATIONS "Update source translation ../translation/*.ts files")
                      set (FILES_TO_TRANSLATE ${FILES_TO_TRANSLATE} ${YAROCK_SOURCES})
                      
                      if (UPDATE_TRANSLATIONS)
                        QT6_CREATE_TRANSLATION(YAROCK_QM_FILES ${FILES_TO_TRANSLATE} ${TS_FILES})
                      else (UPDATE_TRANSLATIONS)
                        QT6_ADD_TRANSLATION(YAROCK_QM_FILES ${TS_FILES})
                      endif (UPDATE_TRANSLATIONS)
                      
                      # ------------------------------------------------------------------------------
                      #  BUILDING
                      # ------------------------------------------------------------------------------
                      set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall")
                      set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Woverloaded-virtual -Wall -Wno-sign-compare")
                      
                      ADD_EXECUTABLE(yarock ${YAROCK_SOURCES} ${YAROCK_RESOURCES_RCC} ${YAROCK_QM_FILES})
                      
                      SET_TARGET_PROPERTIES(yarock PROPERTIES AUTOMOC TRUE)
                      
                      SET_PROPERTY(TARGET  ${LIB_INTERNAL_STATIC_SHORTCUT} PROPERTY IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/shortcuts)
                      
                      if(ENABLE_SHORTCUT)
                        TARGET_LINK_LIBRARIES(yarock ${LIB_INTERNAL_STATIC_SHORTCUT})
                      endif(ENABLE_SHORTCUT)
                      
                      TARGET_LINK_LIBRARIES(yarock
                        X11
                        ${QTLIBS}
                        ${TAGLIB_LIBRARIES}
                        ${HTMLCXX_LIBRARIES}
                      )
                      
                      # ------------------------------------------------------------------------------
                      #  INSTALL
                      # ------------------------------------------------------------------------------
                      # -- install binary file
                      install( TARGETS yarock DESTINATION ${CMAKE_INSTALL_BIN} )
                      
                      # -- install translations files
                      install(FILES ${YAROCK_QM_FILES} DESTINATION "${CMAKE_INSTALL_PREFIX}/share/yarock/translations")
                      
                      # -- install destop file
                      install(FILES data/org.yarock.desktop  DESTINATION "${CMAKE_INSTALL_PREFIX}/share/applications" )
                      
                      # -- install appdata file
                      install(FILES data/org.yarock.appdata.xml  DESTINATION "${CMAKE_INSTALL_PREFIX}/share/appdata" )
                      
                      # -- install icons files
                      INSTALL( FILES ${CMAKE_SOURCE_DIR}/icon/yarock_16x16.png DESTINATION "${CMAKE_INSTALL_PREFIX}/share/icons/hicolor/16x16/apps" RENAME application-x-yarock.png)
                      INSTALL( FILES ${CMAKE_SOURCE_DIR}/icon/yarock_32x32.png DESTINATION "${CMAKE_INSTALL_PREFIX}/share/icons/hicolor/32x32/apps" RENAME application-x-yarock.png)
                      INSTALL( FILES ${CMAKE_SOURCE_DIR}/icon/yarock_48x48.png DESTINATION "${CMAKE_INSTALL_PREFIX}/share/icons/hicolor/48x48/apps" RENAME application-x-yarock.png)
                      INSTALL( FILES ${CMAKE_SOURCE_DIR}/icon/yarock_64x64.png DESTINATION "${CMAKE_INSTALL_PREFIX}/share/icons/hicolor/64x64/apps" RENAME application-x-yarock.png)
                      INSTALL( FILES ${CMAKE_SOURCE_DIR}/icon/yarock_128x128.png DESTINATION "${CMAKE_INSTALL_PREFIX}/share/icons/hicolor/128x128/apps" RENAME application-x-yarock.png)
                      INSTALL( FILES ${CMAKE_SOURCE_DIR}/icon/yarock.svg DESTINATION "${CMAKE_INSTALL_PREFIX}/share/icons/hicolor/scalable/apps" RENAME application-x-yarock.svg)
                      INSTALL( FILES ${CMAKE_SOURCE_DIR}/icon/yarock_48x48.png DESTINATION "${CMAKE_INSTALL_PREFIX}/share/pixmaps/" RENAME application-x-yarock.png)
                      
                      # ------------------------------------------------------------------------------
                      #  UN-INSTALL SUPPORT
                      # ------------------------------------------------------------------------------
                      

                      src/core/player/mpv/CMakeLists.txt

                      # ------------------------------------------------------------------------------
                      #  MPV PLUGIN CMAKE FILE
                      # ------------------------------------------------------------------------------
                      cmake_minimum_required(VERSION 3.16)
                      set(CMAKE_CXX_STANDARD 17)
                      set(CMAKE_CXX_STANDARD_REQUIRED ON)
                      set(CMAKE_CXX_EXTENSIONS OFF)
                      
                      project(enginempv)
                      # ------------------------------------------------------------------------------
                      #  build def (QT PLUGIN)
                      # ------------------------------------------------------------------------------
                      ADD_DEFINITIONS( -Wall )
                      ADD_DEFINITIONS(-DQT_PLUGIN)
                      ADD_DEFINITIONS(-DQT_NO_DEBUG)
                      ADD_DEFINITIONS(-DQT_SHARED)
                      ADD_DEFINITIONS(-DQT_THREAD)
                      
                      
                      ADD_DEFINITIONS( -DENABLE_MPV )
                      
                      # ------------------------------------------------------------------------------
                      #  EXTERNAL LIB
                      # ------------------------------------------------------------------------------
                      FIND_PACKAGE( LIBMPV REQUIRED)
                      
                      
                      # ------------------------------------------------------------------------------
                      #  INCLUDES
                      # ------------------------------------------------------------------------------
                      INCLUDE_DIRECTORIES( ${CMAKE_CURRENT_SOURCE_DIR}/../../../../src/core/player/
                                           ${CMAKE_CURRENT_SOURCE_DIR}/../../../../src/core/player/mpv
                                           ${CMAKE_CURRENT_SOURCE_DIR}/../../../../src/core/mediaitem
                                           ${CMAKE_CURRENT_SOURCE_DIR}/../../../../src
                      )
                      
                      INCLUDE_DIRECTORIES( ${LIBMPV_INCLUDE_DIR} )
                      
                      set (QTLIBS ${Qt6Core_LIBRARIES})
                      set (QTINCLUDES ${Qt6Core_INCLUDE_DIRS})
                      add_definitions( ${Qt6Core_DEFINITIONS})
                      qt_standard_project_setup()
                      
                      INCLUDE_DIRECTORIES( ${QTINCLUDES} )
                      
                      # ------------------------------------------------------------------------------
                      #  SOURCES
                      # ------------------------------------------------------------------------------
                      SET(SOURCES
                          ${CMAKE_CURRENT_SOURCE_DIR}/../../../../src/core/player/mpv/engine_mpv.cpp
                      )
                      
                      # ------------------------------------------------------------------------------
                      #  BUILDING
                      # ------------------------------------------------------------------------------
                      set( CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib )
                      
                      ADD_LIBRARY( enginempv SHARED ${SOURCES} )
                      
                      SET_TARGET_PROPERTIES(enginempv PROPERTIES AUTOMOC TRUE)
                      
                      ADD_DEPENDENCIES(enginempv yarock)
                      
                      TARGET_LINK_LIBRARIES(enginempv ${LIBMPV_LIBRARY} ${QTLIBS})
                      
                      # ------------------------------------------------------------------------------
                      #  INSTALL
                      # ------------------------------------------------------------------------------
                      if (CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
                         set (CMAKE_INSTALL_PREFIX /usr CACHE PATH "default install path" FORCE )
                      endif()
                      
                      set(CMAKE_INSTALL_LIB "${CMAKE_INSTALL_PREFIX}/lib${LIB_SUFFIX}/yarock"  CACHE PATH "libraries installation path" FORCE)
                      
                      install(TARGETS enginempv DESTINATION ${CMAKE_INSTALL_LIB} )
                      

                      I still think has something to do with the c++-17 standard, if I add these in the old code (qt5) I get the same undefined symbol:

                      set(CMAKE_CXX_STANDARD 17)
                      set(CMAKE_CXX_STANDARD_REQUIRED ON)
                      set(CMAKE_CXX_EXTENSIONS OFF)
                      

                      Thanks

                      sierdzioS Offline
                      sierdzioS Offline
                      sierdzio
                      Moderators
                      wrote on last edited by
                      #10

                      @sebaro you are not running moc anywhere, so meta object information is not generated.

                      In your cmake files, add this:

                      set(CMAKE_AUTOMOC ON)
                      

                      (Z(:^

                      1 Reply Last reply
                      1
                      • sebaroS Offline
                        sebaroS Offline
                        sebaro
                        wrote on last edited by
                        #11

                        Automoc was set to true, added CMAKE_AUTOMOC:

                        set(CMAKE_AUTOMOC ON)
                        qt_standard_project_setup()
                        SET_TARGET_PROPERTIES(enginempv PROPERTIES AUTOMOC TRUE)
                        

                        It's in the build progress "Automatic MOC and UIC":

                        [ 98%] Built target enginempv_autogen_timestamp_deps
                        [ 98%] Automatic MOC and UIC for target enginempv
                        [ 98%] Built target enginempv_autogen
                        [ 99%] Building CXX object src/core/player/mpv/CMakeFiles/enginempv.dir/engine_mpv.cpp.o
                        [ 99%] Building CXX object src/core/player/mpv/CMakeFiles/enginempv.dir/enginempv_autogen/mocs_compilation.cpp.o
                        [100%] Linking CXX shared library ../../../../lib/libenginempv.so
                        [100%] Built target enginempv
                        
                        c++filt _ZN10EngineBase16staticMetaObjectE
                        EngineBase::staticMetaObject
                        

                        I see the moc files are generated and they contain EngineBase::staticMetaObject:

                        moc_engine_base.cpp

                        /****************************************************************************
                        ** Meta object code from reading C++ file 'engine_base.h'
                        **
                        ** Created by: The Qt Meta Object Compiler version 68 (Qt 6.7.0)
                        **
                        ** WARNING! All changes made in this file will be lost!
                        *****************************************************************************/
                        
                        #include "../../../src/core/player/engine_base.h"
                        #include <QtCore/qmetatype.h>
                        
                        #include <QtCore/qtmochelpers.h>
                        
                        #include <memory>
                        
                        
                        #include <QtCore/qxptype_traits.h>
                        #if !defined(Q_MOC_OUTPUT_REVISION)
                        #error "The header file 'engine_base.h' doesn't include <QObject>."
                        #elif Q_MOC_OUTPUT_REVISION != 68
                        #error "This file was generated using the moc from 6.7.0. It"
                        #error "cannot be used with the include files from this version of Qt."
                        #error "(The moc has changed too much.)"
                        #endif
                        
                        #ifndef Q_CONSTINIT
                        #define Q_CONSTINIT
                        #endif
                        
                        QT_WARNING_PUSH
                        QT_WARNING_DISABLE_DEPRECATED
                        QT_WARNING_DISABLE_GCC("-Wuseless-cast")
                        namespace {
                        
                        #ifdef QT_MOC_HAS_STRINGDATA
                        struct qt_meta_stringdata_CLASSEngineBaseENDCLASS_t {};
                        constexpr auto qt_meta_stringdata_CLASSEngineBaseENDCLASS = QtMocHelpers::stringData(
                            "EngineBase",
                            "mediaChanged",
                            "",
                            "mediaMetaDataChanged",
                            "mediaAboutToFinish",
                            "mediaFinished",
                            "mediaTick",
                            "time",
                            "mediaTotalTimeChanged",
                            "newTotalTime",
                            "mediaSeekableChanged",
                            "engineQueueFinished",
                            "engineStateChanged",
                            "engineRequestStop",
                            "volumeChanged",
                            "muteStateChanged",
                            "volumeMute",
                            "volumeInc",
                            "volumeDec"
                        );
                        #else  // !QT_MOC_HAS_STRINGDATA
                        #error "qtmochelpers.h not found or too old."
                        #endif // !QT_MOC_HAS_STRINGDATA
                        } // unnamed namespace
                        
                        Q_CONSTINIT static const uint qt_meta_data_CLASSEngineBaseENDCLASS[] = {
                        
                         // content:
                              12,       // revision
                               0,       // classname
                               0,    0, // classinfo
                              15,   14, // methods
                               0,    0, // properties
                               0,    0, // enums/sets
                               0,    0, // constructors
                               0,       // flags
                              12,       // signalCount
                        
                         // signals: name, argc, parameters, tag, flags, initial metatype offsets
                               1,    0,  104,    2, 0x06,    1 /* Public */,
                               3,    0,  105,    2, 0x06,    2 /* Public */,
                               4,    0,  106,    2, 0x06,    3 /* Public */,
                               5,    0,  107,    2, 0x06,    4 /* Public */,
                               6,    1,  108,    2, 0x06,    5 /* Public */,
                               8,    1,  111,    2, 0x06,    7 /* Public */,
                              10,    1,  114,    2, 0x06,    9 /* Public */,
                              11,    0,  117,    2, 0x06,   11 /* Public */,
                              12,    0,  118,    2, 0x06,   12 /* Public */,
                              13,    0,  119,    2, 0x06,   13 /* Public */,
                              14,    0,  120,    2, 0x06,   14 /* Public */,
                              15,    0,  121,    2, 0x06,   15 /* Public */,
                        
                         // slots: name, argc, parameters, tag, flags, initial metatype offsets
                              16,    0,  122,    2, 0x0a,   16 /* Public */,
                              17,    0,  123,    2, 0x0a,   17 /* Public */,
                              18,    0,  124,    2, 0x0a,   18 /* Public */,
                        
                         // signals: parameters
                            QMetaType::Void,
                            QMetaType::Void,
                            QMetaType::Void,
                            QMetaType::Void,
                            QMetaType::Void, QMetaType::LongLong,    7,
                            QMetaType::Void, QMetaType::LongLong,    9,
                            QMetaType::Void, QMetaType::Bool,    2,
                            QMetaType::Void,
                            QMetaType::Void,
                            QMetaType::Void,
                            QMetaType::Void,
                            QMetaType::Void,
                        
                         // slots: parameters
                            QMetaType::Void,
                            QMetaType::Void,
                            QMetaType::Void,
                        
                               0        // eod
                        };
                        
                        Q_CONSTINIT const QMetaObject EngineBase::staticMetaObject = { {
                            QMetaObject::SuperData::link<QObject::staticMetaObject>(),
                            qt_meta_stringdata_CLASSEngineBaseENDCLASS.offsetsAndSizes,
                            qt_meta_data_CLASSEngineBaseENDCLASS,
                            qt_static_metacall,
                            nullptr,
                            qt_incomplete_metaTypeArray<qt_meta_stringdata_CLASSEngineBaseENDCLASS_t,
                                // Q_OBJECT / Q_GADGET
                                QtPrivate::TypeAndForceComplete<EngineBase, std::true_type>,
                                // method 'mediaChanged'
                                QtPrivate::TypeAndForceComplete<void, std::false_type>,
                                // method 'mediaMetaDataChanged'
                                QtPrivate::TypeAndForceComplete<void, std::false_type>,
                                // method 'mediaAboutToFinish'
                                QtPrivate::TypeAndForceComplete<void, std::false_type>,
                                // method 'mediaFinished'
                                QtPrivate::TypeAndForceComplete<void, std::false_type>,
                                // method 'mediaTick'
                                QtPrivate::TypeAndForceComplete<void, std::false_type>,
                                QtPrivate::TypeAndForceComplete<qint64, std::false_type>,
                                // method 'mediaTotalTimeChanged'
                                QtPrivate::TypeAndForceComplete<void, std::false_type>,
                                QtPrivate::TypeAndForceComplete<qint64, std::false_type>,
                                // method 'mediaSeekableChanged'
                                QtPrivate::TypeAndForceComplete<void, std::false_type>,
                                QtPrivate::TypeAndForceComplete<bool, std::false_type>,
                                // method 'engineQueueFinished'
                                QtPrivate::TypeAndForceComplete<void, std::false_type>,
                                // method 'engineStateChanged'
                                QtPrivate::TypeAndForceComplete<void, std::false_type>,
                                // method 'engineRequestStop'
                                QtPrivate::TypeAndForceComplete<void, std::false_type>,
                                // method 'volumeChanged'
                                QtPrivate::TypeAndForceComplete<void, std::false_type>,
                                // method 'muteStateChanged'
                                QtPrivate::TypeAndForceComplete<void, std::false_type>,
                                // method 'volumeMute'
                                QtPrivate::TypeAndForceComplete<void, std::false_type>,
                                // method 'volumeInc'
                                QtPrivate::TypeAndForceComplete<void, std::false_type>,
                                // method 'volumeDec'
                                QtPrivate::TypeAndForceComplete<void, std::false_type>
                            >,
                            nullptr
                        } };
                        
                        void EngineBase::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a)
                        {
                            if (_c == QMetaObject::InvokeMetaMethod) {
                                auto *_t = static_cast<EngineBase *>(_o);
                                (void)_t;
                                switch (_id) {
                                case 0: _t->mediaChanged(); break;
                                case 1: _t->mediaMetaDataChanged(); break;
                                case 2: _t->mediaAboutToFinish(); break;
                                case 3: _t->mediaFinished(); break;
                                case 4: _t->mediaTick((*reinterpret_cast< std::add_pointer_t<qint64>>(_a[1]))); break;
                                case 5: _t->mediaTotalTimeChanged((*reinterpret_cast< std::add_pointer_t<qint64>>(_a[1]))); break;
                                case 6: _t->mediaSeekableChanged((*reinterpret_cast< std::add_pointer_t<bool>>(_a[1]))); break;
                                case 7: _t->engineQueueFinished(); break;
                                case 8: _t->engineStateChanged(); break;
                                case 9: _t->engineRequestStop(); break;
                                case 10: _t->volumeChanged(); break;
                                case 11: _t->muteStateChanged(); break;
                                case 12: _t->volumeMute(); break;
                                case 13: _t->volumeInc(); break;
                                case 14: _t->volumeDec(); break;
                                default: ;
                                }
                            } else if (_c == QMetaObject::IndexOfMethod) {
                                int *result = reinterpret_cast<int *>(_a[0]);
                                {
                                    using _t = void (EngineBase::*)();
                                    if (_t _q_method = &EngineBase::mediaChanged; *reinterpret_cast<_t *>(_a[1]) == _q_method) {
                                        *result = 0;
                                        return;
                                    }
                                }
                                {
                                    using _t = void (EngineBase::*)();
                                    if (_t _q_method = &EngineBase::mediaMetaDataChanged; *reinterpret_cast<_t *>(_a[1]) == _q_method) {
                                        *result = 1;
                                        return;
                                    }
                                }
                                {
                                    using _t = void (EngineBase::*)();
                                    if (_t _q_method = &EngineBase::mediaAboutToFinish; *reinterpret_cast<_t *>(_a[1]) == _q_method) {
                                        *result = 2;
                                        return;
                                    }
                                }
                                {
                                    using _t = void (EngineBase::*)();
                                    if (_t _q_method = &EngineBase::mediaFinished; *reinterpret_cast<_t *>(_a[1]) == _q_method) {
                                        *result = 3;
                                        return;
                                    }
                                }
                                {
                                    using _t = void (EngineBase::*)(qint64 );
                                    if (_t _q_method = &EngineBase::mediaTick; *reinterpret_cast<_t *>(_a[1]) == _q_method) {
                                        *result = 4;
                                        return;
                                    }
                                }
                                {
                                    using _t = void (EngineBase::*)(qint64 );
                                    if (_t _q_method = &EngineBase::mediaTotalTimeChanged; *reinterpret_cast<_t *>(_a[1]) == _q_method) {
                                        *result = 5;
                                        return;
                                    }
                                }
                                {
                                    using _t = void (EngineBase::*)(bool );
                                    if (_t _q_method = &EngineBase::mediaSeekableChanged; *reinterpret_cast<_t *>(_a[1]) == _q_method) {
                                        *result = 6;
                                        return;
                                    }
                                }
                                {
                                    using _t = void (EngineBase::*)();
                                    if (_t _q_method = &EngineBase::engineQueueFinished; *reinterpret_cast<_t *>(_a[1]) == _q_method) {
                                        *result = 7;
                                        return;
                                    }
                                }
                                {
                                    using _t = void (EngineBase::*)();
                                    if (_t _q_method = &EngineBase::engineStateChanged; *reinterpret_cast<_t *>(_a[1]) == _q_method) {
                                        *result = 8;
                                        return;
                                    }
                                }
                                {
                                    using _t = void (EngineBase::*)();
                                    if (_t _q_method = &EngineBase::engineRequestStop; *reinterpret_cast<_t *>(_a[1]) == _q_method) {
                                        *result = 9;
                                        return;
                                    }
                                }
                                {
                                    using _t = void (EngineBase::*)();
                                    if (_t _q_method = &EngineBase::volumeChanged; *reinterpret_cast<_t *>(_a[1]) == _q_method) {
                                        *result = 10;
                                        return;
                                    }
                                }
                                {
                                    using _t = void (EngineBase::*)();
                                    if (_t _q_method = &EngineBase::muteStateChanged; *reinterpret_cast<_t *>(_a[1]) == _q_method) {
                                        *result = 11;
                                        return;
                                    }
                                }
                            }
                        }
                        
                        const QMetaObject *EngineBase::metaObject() const
                        {
                            return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject;
                        }
                        
                        void *EngineBase::qt_metacast(const char *_clname)
                        {
                            if (!_clname) return nullptr;
                            if (!strcmp(_clname, qt_meta_stringdata_CLASSEngineBaseENDCLASS.stringdata0))
                                return static_cast<void*>(this);
                            return QObject::qt_metacast(_clname);
                        }
                        
                        int EngineBase::qt_metacall(QMetaObject::Call _c, int _id, void **_a)
                        {
                            _id = QObject::qt_metacall(_c, _id, _a);
                            if (_id < 0)
                                return _id;
                            if (_c == QMetaObject::InvokeMetaMethod) {
                                if (_id < 15)
                                    qt_static_metacall(this, _c, _id, _a);
                                _id -= 15;
                            } else if (_c == QMetaObject::RegisterMethodArgumentMetaType) {
                                if (_id < 15)
                                    *reinterpret_cast<QMetaType *>(_a[0]) = QMetaType();
                                _id -= 15;
                            }
                            return _id;
                        }
                        
                        // SIGNAL 0
                        void EngineBase::mediaChanged()
                        {
                            QMetaObject::activate(this, &staticMetaObject, 0, nullptr);
                        }
                        
                        // SIGNAL 1
                        void EngineBase::mediaMetaDataChanged()
                        {
                            QMetaObject::activate(this, &staticMetaObject, 1, nullptr);
                        }
                        
                        // SIGNAL 2
                        void EngineBase::mediaAboutToFinish()
                        {
                            QMetaObject::activate(this, &staticMetaObject, 2, nullptr);
                        }
                        
                        // SIGNAL 3
                        void EngineBase::mediaFinished()
                        {
                            QMetaObject::activate(this, &staticMetaObject, 3, nullptr);
                        }
                        
                        // SIGNAL 4
                        void EngineBase::mediaTick(qint64 _t1)
                        {
                            void *_a[] = { nullptr, const_cast<void*>(reinterpret_cast<const void*>(std::addressof(_t1))) };
                            QMetaObject::activate(this, &staticMetaObject, 4, _a);
                        }
                        
                        // SIGNAL 5
                        void EngineBase::mediaTotalTimeChanged(qint64 _t1)
                        {
                            void *_a[] = { nullptr, const_cast<void*>(reinterpret_cast<const void*>(std::addressof(_t1))) };
                            QMetaObject::activate(this, &staticMetaObject, 5, _a);
                        }
                        
                        // SIGNAL 6
                        void EngineBase::mediaSeekableChanged(bool _t1)
                        {
                            void *_a[] = { nullptr, const_cast<void*>(reinterpret_cast<const void*>(std::addressof(_t1))) };
                            QMetaObject::activate(this, &staticMetaObject, 6, _a);
                        }
                        
                        // SIGNAL 7
                        void EngineBase::engineQueueFinished()
                        {
                            QMetaObject::activate(this, &staticMetaObject, 7, nullptr);
                        }
                        
                        // SIGNAL 8
                        void EngineBase::engineStateChanged()
                        {
                            QMetaObject::activate(this, &staticMetaObject, 8, nullptr);
                        }
                        
                        // SIGNAL 9
                        void EngineBase::engineRequestStop()
                        {
                            QMetaObject::activate(this, &staticMetaObject, 9, nullptr);
                        }
                        
                        // SIGNAL 10
                        void EngineBase::volumeChanged()
                        {
                            QMetaObject::activate(this, &staticMetaObject, 10, nullptr);
                        }
                        
                        // SIGNAL 11
                        void EngineBase::muteStateChanged()
                        {
                            QMetaObject::activate(this, &staticMetaObject, 11, nullptr);
                        }
                        QT_WARNING_POP
                        
                        

                        moc_engine_mpv.cpp

                        /****************************************************************************
                        ** Meta object code from reading C++ file 'engine_mpv.h'
                        **
                        ** Created by: The Qt Meta Object Compiler version 68 (Qt 6.7.0)
                        **
                        ** WARNING! All changes made in this file will be lost!
                        *****************************************************************************/
                        
                        #include "../../../../../../../src/core/player/mpv/engine_mpv.h"
                        #include <QtCore/qmetatype.h>
                        #include <QtCore/qplugin.h>
                        
                        #include <QtCore/qtmochelpers.h>
                        
                        #include <memory>
                        
                        
                        #include <QtCore/qxptype_traits.h>
                        #if !defined(Q_MOC_OUTPUT_REVISION)
                        #error "The header file 'engine_mpv.h' doesn't include <QObject>."
                        #elif Q_MOC_OUTPUT_REVISION != 68
                        #error "This file was generated using the moc from 6.7.0. It"
                        #error "cannot be used with the include files from this version of Qt."
                        #error "(The moc has changed too much.)"
                        #endif
                        
                        #ifndef Q_CONSTINIT
                        #define Q_CONSTINIT
                        #endif
                        
                        QT_WARNING_PUSH
                        QT_WARNING_DISABLE_DEPRECATED
                        QT_WARNING_DISABLE_GCC("-Wuseless-cast")
                        namespace {
                        
                        #ifdef QT_MOC_HAS_STRINGDATA
                        struct qt_meta_stringdata_CLASSEngineMpvENDCLASS_t {};
                        constexpr auto qt_meta_stringdata_CLASSEngineMpvENDCLASS = QtMocHelpers::stringData(
                            "EngineMpv",
                            "volumeMute",
                            "",
                            "volumeInc",
                            "volumeDec"
                        );
                        #else  // !QT_MOC_HAS_STRINGDATA
                        #error "qtmochelpers.h not found or too old."
                        #endif // !QT_MOC_HAS_STRINGDATA
                        } // unnamed namespace
                        
                        Q_CONSTINIT static const uint qt_meta_data_CLASSEngineMpvENDCLASS[] = {
                        
                         // content:
                              12,       // revision
                               0,       // classname
                               0,    0, // classinfo
                               3,   14, // methods
                               0,    0, // properties
                               0,    0, // enums/sets
                               0,    0, // constructors
                               0,       // flags
                               0,       // signalCount
                        
                         // slots: name, argc, parameters, tag, flags, initial metatype offsets
                               1,    0,   32,    2, 0x0a,    1 /* Public */,
                               3,    0,   33,    2, 0x0a,    2 /* Public */,
                               4,    0,   34,    2, 0x0a,    3 /* Public */,
                        
                         // slots: parameters
                            QMetaType::Void,
                            QMetaType::Void,
                            QMetaType::Void,
                        
                               0        // eod
                        };
                        
                        Q_CONSTINIT const QMetaObject EngineMpv::staticMetaObject = { {
                            QMetaObject::SuperData::link<EngineBase::staticMetaObject>(),
                            qt_meta_stringdata_CLASSEngineMpvENDCLASS.offsetsAndSizes,
                            qt_meta_data_CLASSEngineMpvENDCLASS,
                            qt_static_metacall,
                            nullptr,
                            qt_incomplete_metaTypeArray<qt_meta_stringdata_CLASSEngineMpvENDCLASS_t,
                                // Q_OBJECT / Q_GADGET
                                QtPrivate::TypeAndForceComplete<EngineMpv, std::true_type>,
                                // method 'volumeMute'
                                QtPrivate::TypeAndForceComplete<void, std::false_type>,
                                // method 'volumeInc'
                                QtPrivate::TypeAndForceComplete<void, std::false_type>,
                                // method 'volumeDec'
                                QtPrivate::TypeAndForceComplete<void, std::false_type>
                            >,
                            nullptr
                        } };
                        
                        void EngineMpv::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a)
                        {
                            if (_c == QMetaObject::InvokeMetaMethod) {
                                auto *_t = static_cast<EngineMpv *>(_o);
                                (void)_t;
                                switch (_id) {
                                case 0: _t->volumeMute(); break;
                                case 1: _t->volumeInc(); break;
                                case 2: _t->volumeDec(); break;
                                default: ;
                                }
                            }
                            (void)_a;
                        }
                        
                        const QMetaObject *EngineMpv::metaObject() const
                        {
                            return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject;
                        }
                        
                        void *EngineMpv::qt_metacast(const char *_clname)
                        {
                            if (!_clname) return nullptr;
                            if (!strcmp(_clname, qt_meta_stringdata_CLASSEngineMpvENDCLASS.stringdata0))
                                return static_cast<void*>(this);
                            if (!strcmp(_clname, "yarock.EngineBase/1.0"))
                                return static_cast< EngineBase*>(this);
                            return EngineBase::qt_metacast(_clname);
                        }
                        
                        int EngineMpv::qt_metacall(QMetaObject::Call _c, int _id, void **_a)
                        {
                            _id = EngineBase::qt_metacall(_c, _id, _a);
                            if (_id < 0)
                                return _id;
                            if (_c == QMetaObject::InvokeMetaMethod) {
                                if (_id < 3)
                                    qt_static_metacall(this, _c, _id, _a);
                                _id -= 3;
                            } else if (_c == QMetaObject::RegisterMethodArgumentMetaType) {
                                if (_id < 3)
                                    *reinterpret_cast<QMetaType *>(_a[0]) = QMetaType();
                                _id -= 3;
                            }
                            return _id;
                        }
                        
                        #ifdef QT_MOC_EXPORT_PLUGIN_V2
                        static constexpr unsigned char qt_pluginMetaDataV2_EngineMpv[] = {
                            0xbf, 
                            // "IID"
                            0x02,  0x69,  'E',  'n',  'g',  'i',  'n',  'e', 
                            'M',  'p',  'v', 
                            // "className"
                            0x03,  0x69,  'E',  'n',  'g',  'i',  'n',  'e', 
                            'M',  'p',  'v', 
                            0xff, 
                        };
                        QT_MOC_EXPORT_PLUGIN_V2(EngineMpv, EngineMpv, qt_pluginMetaDataV2_EngineMpv)
                        #else
                        QT_PLUGIN_METADATA_SECTION
                        Q_CONSTINIT static constexpr unsigned char qt_pluginMetaData_EngineMpv[] = {
                            'Q', 'T', 'M', 'E', 'T', 'A', 'D', 'A', 'T', 'A', ' ', '!',
                            // metadata version, Qt version, architectural requirements
                            0, QT_VERSION_MAJOR, QT_VERSION_MINOR, qPluginArchRequirements(),
                            0xbf, 
                            // "IID"
                            0x02,  0x69,  'E',  'n',  'g',  'i',  'n',  'e', 
                            'M',  'p',  'v', 
                            // "className"
                            0x03,  0x69,  'E',  'n',  'g',  'i',  'n',  'e', 
                            'M',  'p',  'v', 
                            0xff, 
                        };
                        QT_MOC_EXPORT_PLUGIN(EngineMpv, EngineMpv)
                        #endif  // QT_MOC_EXPORT_PLUGIN_V2
                        
                        QT_WARNING_POP
                        
                        sierdzioS 1 Reply Last reply
                        0
                        • sebaroS sebaro

                          Automoc was set to true, added CMAKE_AUTOMOC:

                          set(CMAKE_AUTOMOC ON)
                          qt_standard_project_setup()
                          SET_TARGET_PROPERTIES(enginempv PROPERTIES AUTOMOC TRUE)
                          

                          It's in the build progress "Automatic MOC and UIC":

                          [ 98%] Built target enginempv_autogen_timestamp_deps
                          [ 98%] Automatic MOC and UIC for target enginempv
                          [ 98%] Built target enginempv_autogen
                          [ 99%] Building CXX object src/core/player/mpv/CMakeFiles/enginempv.dir/engine_mpv.cpp.o
                          [ 99%] Building CXX object src/core/player/mpv/CMakeFiles/enginempv.dir/enginempv_autogen/mocs_compilation.cpp.o
                          [100%] Linking CXX shared library ../../../../lib/libenginempv.so
                          [100%] Built target enginempv
                          
                          c++filt _ZN10EngineBase16staticMetaObjectE
                          EngineBase::staticMetaObject
                          

                          I see the moc files are generated and they contain EngineBase::staticMetaObject:

                          moc_engine_base.cpp

                          /****************************************************************************
                          ** Meta object code from reading C++ file 'engine_base.h'
                          **
                          ** Created by: The Qt Meta Object Compiler version 68 (Qt 6.7.0)
                          **
                          ** WARNING! All changes made in this file will be lost!
                          *****************************************************************************/
                          
                          #include "../../../src/core/player/engine_base.h"
                          #include <QtCore/qmetatype.h>
                          
                          #include <QtCore/qtmochelpers.h>
                          
                          #include <memory>
                          
                          
                          #include <QtCore/qxptype_traits.h>
                          #if !defined(Q_MOC_OUTPUT_REVISION)
                          #error "The header file 'engine_base.h' doesn't include <QObject>."
                          #elif Q_MOC_OUTPUT_REVISION != 68
                          #error "This file was generated using the moc from 6.7.0. It"
                          #error "cannot be used with the include files from this version of Qt."
                          #error "(The moc has changed too much.)"
                          #endif
                          
                          #ifndef Q_CONSTINIT
                          #define Q_CONSTINIT
                          #endif
                          
                          QT_WARNING_PUSH
                          QT_WARNING_DISABLE_DEPRECATED
                          QT_WARNING_DISABLE_GCC("-Wuseless-cast")
                          namespace {
                          
                          #ifdef QT_MOC_HAS_STRINGDATA
                          struct qt_meta_stringdata_CLASSEngineBaseENDCLASS_t {};
                          constexpr auto qt_meta_stringdata_CLASSEngineBaseENDCLASS = QtMocHelpers::stringData(
                              "EngineBase",
                              "mediaChanged",
                              "",
                              "mediaMetaDataChanged",
                              "mediaAboutToFinish",
                              "mediaFinished",
                              "mediaTick",
                              "time",
                              "mediaTotalTimeChanged",
                              "newTotalTime",
                              "mediaSeekableChanged",
                              "engineQueueFinished",
                              "engineStateChanged",
                              "engineRequestStop",
                              "volumeChanged",
                              "muteStateChanged",
                              "volumeMute",
                              "volumeInc",
                              "volumeDec"
                          );
                          #else  // !QT_MOC_HAS_STRINGDATA
                          #error "qtmochelpers.h not found or too old."
                          #endif // !QT_MOC_HAS_STRINGDATA
                          } // unnamed namespace
                          
                          Q_CONSTINIT static const uint qt_meta_data_CLASSEngineBaseENDCLASS[] = {
                          
                           // content:
                                12,       // revision
                                 0,       // classname
                                 0,    0, // classinfo
                                15,   14, // methods
                                 0,    0, // properties
                                 0,    0, // enums/sets
                                 0,    0, // constructors
                                 0,       // flags
                                12,       // signalCount
                          
                           // signals: name, argc, parameters, tag, flags, initial metatype offsets
                                 1,    0,  104,    2, 0x06,    1 /* Public */,
                                 3,    0,  105,    2, 0x06,    2 /* Public */,
                                 4,    0,  106,    2, 0x06,    3 /* Public */,
                                 5,    0,  107,    2, 0x06,    4 /* Public */,
                                 6,    1,  108,    2, 0x06,    5 /* Public */,
                                 8,    1,  111,    2, 0x06,    7 /* Public */,
                                10,    1,  114,    2, 0x06,    9 /* Public */,
                                11,    0,  117,    2, 0x06,   11 /* Public */,
                                12,    0,  118,    2, 0x06,   12 /* Public */,
                                13,    0,  119,    2, 0x06,   13 /* Public */,
                                14,    0,  120,    2, 0x06,   14 /* Public */,
                                15,    0,  121,    2, 0x06,   15 /* Public */,
                          
                           // slots: name, argc, parameters, tag, flags, initial metatype offsets
                                16,    0,  122,    2, 0x0a,   16 /* Public */,
                                17,    0,  123,    2, 0x0a,   17 /* Public */,
                                18,    0,  124,    2, 0x0a,   18 /* Public */,
                          
                           // signals: parameters
                              QMetaType::Void,
                              QMetaType::Void,
                              QMetaType::Void,
                              QMetaType::Void,
                              QMetaType::Void, QMetaType::LongLong,    7,
                              QMetaType::Void, QMetaType::LongLong,    9,
                              QMetaType::Void, QMetaType::Bool,    2,
                              QMetaType::Void,
                              QMetaType::Void,
                              QMetaType::Void,
                              QMetaType::Void,
                              QMetaType::Void,
                          
                           // slots: parameters
                              QMetaType::Void,
                              QMetaType::Void,
                              QMetaType::Void,
                          
                                 0        // eod
                          };
                          
                          Q_CONSTINIT const QMetaObject EngineBase::staticMetaObject = { {
                              QMetaObject::SuperData::link<QObject::staticMetaObject>(),
                              qt_meta_stringdata_CLASSEngineBaseENDCLASS.offsetsAndSizes,
                              qt_meta_data_CLASSEngineBaseENDCLASS,
                              qt_static_metacall,
                              nullptr,
                              qt_incomplete_metaTypeArray<qt_meta_stringdata_CLASSEngineBaseENDCLASS_t,
                                  // Q_OBJECT / Q_GADGET
                                  QtPrivate::TypeAndForceComplete<EngineBase, std::true_type>,
                                  // method 'mediaChanged'
                                  QtPrivate::TypeAndForceComplete<void, std::false_type>,
                                  // method 'mediaMetaDataChanged'
                                  QtPrivate::TypeAndForceComplete<void, std::false_type>,
                                  // method 'mediaAboutToFinish'
                                  QtPrivate::TypeAndForceComplete<void, std::false_type>,
                                  // method 'mediaFinished'
                                  QtPrivate::TypeAndForceComplete<void, std::false_type>,
                                  // method 'mediaTick'
                                  QtPrivate::TypeAndForceComplete<void, std::false_type>,
                                  QtPrivate::TypeAndForceComplete<qint64, std::false_type>,
                                  // method 'mediaTotalTimeChanged'
                                  QtPrivate::TypeAndForceComplete<void, std::false_type>,
                                  QtPrivate::TypeAndForceComplete<qint64, std::false_type>,
                                  // method 'mediaSeekableChanged'
                                  QtPrivate::TypeAndForceComplete<void, std::false_type>,
                                  QtPrivate::TypeAndForceComplete<bool, std::false_type>,
                                  // method 'engineQueueFinished'
                                  QtPrivate::TypeAndForceComplete<void, std::false_type>,
                                  // method 'engineStateChanged'
                                  QtPrivate::TypeAndForceComplete<void, std::false_type>,
                                  // method 'engineRequestStop'
                                  QtPrivate::TypeAndForceComplete<void, std::false_type>,
                                  // method 'volumeChanged'
                                  QtPrivate::TypeAndForceComplete<void, std::false_type>,
                                  // method 'muteStateChanged'
                                  QtPrivate::TypeAndForceComplete<void, std::false_type>,
                                  // method 'volumeMute'
                                  QtPrivate::TypeAndForceComplete<void, std::false_type>,
                                  // method 'volumeInc'
                                  QtPrivate::TypeAndForceComplete<void, std::false_type>,
                                  // method 'volumeDec'
                                  QtPrivate::TypeAndForceComplete<void, std::false_type>
                              >,
                              nullptr
                          } };
                          
                          void EngineBase::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a)
                          {
                              if (_c == QMetaObject::InvokeMetaMethod) {
                                  auto *_t = static_cast<EngineBase *>(_o);
                                  (void)_t;
                                  switch (_id) {
                                  case 0: _t->mediaChanged(); break;
                                  case 1: _t->mediaMetaDataChanged(); break;
                                  case 2: _t->mediaAboutToFinish(); break;
                                  case 3: _t->mediaFinished(); break;
                                  case 4: _t->mediaTick((*reinterpret_cast< std::add_pointer_t<qint64>>(_a[1]))); break;
                                  case 5: _t->mediaTotalTimeChanged((*reinterpret_cast< std::add_pointer_t<qint64>>(_a[1]))); break;
                                  case 6: _t->mediaSeekableChanged((*reinterpret_cast< std::add_pointer_t<bool>>(_a[1]))); break;
                                  case 7: _t->engineQueueFinished(); break;
                                  case 8: _t->engineStateChanged(); break;
                                  case 9: _t->engineRequestStop(); break;
                                  case 10: _t->volumeChanged(); break;
                                  case 11: _t->muteStateChanged(); break;
                                  case 12: _t->volumeMute(); break;
                                  case 13: _t->volumeInc(); break;
                                  case 14: _t->volumeDec(); break;
                                  default: ;
                                  }
                              } else if (_c == QMetaObject::IndexOfMethod) {
                                  int *result = reinterpret_cast<int *>(_a[0]);
                                  {
                                      using _t = void (EngineBase::*)();
                                      if (_t _q_method = &EngineBase::mediaChanged; *reinterpret_cast<_t *>(_a[1]) == _q_method) {
                                          *result = 0;
                                          return;
                                      }
                                  }
                                  {
                                      using _t = void (EngineBase::*)();
                                      if (_t _q_method = &EngineBase::mediaMetaDataChanged; *reinterpret_cast<_t *>(_a[1]) == _q_method) {
                                          *result = 1;
                                          return;
                                      }
                                  }
                                  {
                                      using _t = void (EngineBase::*)();
                                      if (_t _q_method = &EngineBase::mediaAboutToFinish; *reinterpret_cast<_t *>(_a[1]) == _q_method) {
                                          *result = 2;
                                          return;
                                      }
                                  }
                                  {
                                      using _t = void (EngineBase::*)();
                                      if (_t _q_method = &EngineBase::mediaFinished; *reinterpret_cast<_t *>(_a[1]) == _q_method) {
                                          *result = 3;
                                          return;
                                      }
                                  }
                                  {
                                      using _t = void (EngineBase::*)(qint64 );
                                      if (_t _q_method = &EngineBase::mediaTick; *reinterpret_cast<_t *>(_a[1]) == _q_method) {
                                          *result = 4;
                                          return;
                                      }
                                  }
                                  {
                                      using _t = void (EngineBase::*)(qint64 );
                                      if (_t _q_method = &EngineBase::mediaTotalTimeChanged; *reinterpret_cast<_t *>(_a[1]) == _q_method) {
                                          *result = 5;
                                          return;
                                      }
                                  }
                                  {
                                      using _t = void (EngineBase::*)(bool );
                                      if (_t _q_method = &EngineBase::mediaSeekableChanged; *reinterpret_cast<_t *>(_a[1]) == _q_method) {
                                          *result = 6;
                                          return;
                                      }
                                  }
                                  {
                                      using _t = void (EngineBase::*)();
                                      if (_t _q_method = &EngineBase::engineQueueFinished; *reinterpret_cast<_t *>(_a[1]) == _q_method) {
                                          *result = 7;
                                          return;
                                      }
                                  }
                                  {
                                      using _t = void (EngineBase::*)();
                                      if (_t _q_method = &EngineBase::engineStateChanged; *reinterpret_cast<_t *>(_a[1]) == _q_method) {
                                          *result = 8;
                                          return;
                                      }
                                  }
                                  {
                                      using _t = void (EngineBase::*)();
                                      if (_t _q_method = &EngineBase::engineRequestStop; *reinterpret_cast<_t *>(_a[1]) == _q_method) {
                                          *result = 9;
                                          return;
                                      }
                                  }
                                  {
                                      using _t = void (EngineBase::*)();
                                      if (_t _q_method = &EngineBase::volumeChanged; *reinterpret_cast<_t *>(_a[1]) == _q_method) {
                                          *result = 10;
                                          return;
                                      }
                                  }
                                  {
                                      using _t = void (EngineBase::*)();
                                      if (_t _q_method = &EngineBase::muteStateChanged; *reinterpret_cast<_t *>(_a[1]) == _q_method) {
                                          *result = 11;
                                          return;
                                      }
                                  }
                              }
                          }
                          
                          const QMetaObject *EngineBase::metaObject() const
                          {
                              return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject;
                          }
                          
                          void *EngineBase::qt_metacast(const char *_clname)
                          {
                              if (!_clname) return nullptr;
                              if (!strcmp(_clname, qt_meta_stringdata_CLASSEngineBaseENDCLASS.stringdata0))
                                  return static_cast<void*>(this);
                              return QObject::qt_metacast(_clname);
                          }
                          
                          int EngineBase::qt_metacall(QMetaObject::Call _c, int _id, void **_a)
                          {
                              _id = QObject::qt_metacall(_c, _id, _a);
                              if (_id < 0)
                                  return _id;
                              if (_c == QMetaObject::InvokeMetaMethod) {
                                  if (_id < 15)
                                      qt_static_metacall(this, _c, _id, _a);
                                  _id -= 15;
                              } else if (_c == QMetaObject::RegisterMethodArgumentMetaType) {
                                  if (_id < 15)
                                      *reinterpret_cast<QMetaType *>(_a[0]) = QMetaType();
                                  _id -= 15;
                              }
                              return _id;
                          }
                          
                          // SIGNAL 0
                          void EngineBase::mediaChanged()
                          {
                              QMetaObject::activate(this, &staticMetaObject, 0, nullptr);
                          }
                          
                          // SIGNAL 1
                          void EngineBase::mediaMetaDataChanged()
                          {
                              QMetaObject::activate(this, &staticMetaObject, 1, nullptr);
                          }
                          
                          // SIGNAL 2
                          void EngineBase::mediaAboutToFinish()
                          {
                              QMetaObject::activate(this, &staticMetaObject, 2, nullptr);
                          }
                          
                          // SIGNAL 3
                          void EngineBase::mediaFinished()
                          {
                              QMetaObject::activate(this, &staticMetaObject, 3, nullptr);
                          }
                          
                          // SIGNAL 4
                          void EngineBase::mediaTick(qint64 _t1)
                          {
                              void *_a[] = { nullptr, const_cast<void*>(reinterpret_cast<const void*>(std::addressof(_t1))) };
                              QMetaObject::activate(this, &staticMetaObject, 4, _a);
                          }
                          
                          // SIGNAL 5
                          void EngineBase::mediaTotalTimeChanged(qint64 _t1)
                          {
                              void *_a[] = { nullptr, const_cast<void*>(reinterpret_cast<const void*>(std::addressof(_t1))) };
                              QMetaObject::activate(this, &staticMetaObject, 5, _a);
                          }
                          
                          // SIGNAL 6
                          void EngineBase::mediaSeekableChanged(bool _t1)
                          {
                              void *_a[] = { nullptr, const_cast<void*>(reinterpret_cast<const void*>(std::addressof(_t1))) };
                              QMetaObject::activate(this, &staticMetaObject, 6, _a);
                          }
                          
                          // SIGNAL 7
                          void EngineBase::engineQueueFinished()
                          {
                              QMetaObject::activate(this, &staticMetaObject, 7, nullptr);
                          }
                          
                          // SIGNAL 8
                          void EngineBase::engineStateChanged()
                          {
                              QMetaObject::activate(this, &staticMetaObject, 8, nullptr);
                          }
                          
                          // SIGNAL 9
                          void EngineBase::engineRequestStop()
                          {
                              QMetaObject::activate(this, &staticMetaObject, 9, nullptr);
                          }
                          
                          // SIGNAL 10
                          void EngineBase::volumeChanged()
                          {
                              QMetaObject::activate(this, &staticMetaObject, 10, nullptr);
                          }
                          
                          // SIGNAL 11
                          void EngineBase::muteStateChanged()
                          {
                              QMetaObject::activate(this, &staticMetaObject, 11, nullptr);
                          }
                          QT_WARNING_POP
                          
                          

                          moc_engine_mpv.cpp

                          /****************************************************************************
                          ** Meta object code from reading C++ file 'engine_mpv.h'
                          **
                          ** Created by: The Qt Meta Object Compiler version 68 (Qt 6.7.0)
                          **
                          ** WARNING! All changes made in this file will be lost!
                          *****************************************************************************/
                          
                          #include "../../../../../../../src/core/player/mpv/engine_mpv.h"
                          #include <QtCore/qmetatype.h>
                          #include <QtCore/qplugin.h>
                          
                          #include <QtCore/qtmochelpers.h>
                          
                          #include <memory>
                          
                          
                          #include <QtCore/qxptype_traits.h>
                          #if !defined(Q_MOC_OUTPUT_REVISION)
                          #error "The header file 'engine_mpv.h' doesn't include <QObject>."
                          #elif Q_MOC_OUTPUT_REVISION != 68
                          #error "This file was generated using the moc from 6.7.0. It"
                          #error "cannot be used with the include files from this version of Qt."
                          #error "(The moc has changed too much.)"
                          #endif
                          
                          #ifndef Q_CONSTINIT
                          #define Q_CONSTINIT
                          #endif
                          
                          QT_WARNING_PUSH
                          QT_WARNING_DISABLE_DEPRECATED
                          QT_WARNING_DISABLE_GCC("-Wuseless-cast")
                          namespace {
                          
                          #ifdef QT_MOC_HAS_STRINGDATA
                          struct qt_meta_stringdata_CLASSEngineMpvENDCLASS_t {};
                          constexpr auto qt_meta_stringdata_CLASSEngineMpvENDCLASS = QtMocHelpers::stringData(
                              "EngineMpv",
                              "volumeMute",
                              "",
                              "volumeInc",
                              "volumeDec"
                          );
                          #else  // !QT_MOC_HAS_STRINGDATA
                          #error "qtmochelpers.h not found or too old."
                          #endif // !QT_MOC_HAS_STRINGDATA
                          } // unnamed namespace
                          
                          Q_CONSTINIT static const uint qt_meta_data_CLASSEngineMpvENDCLASS[] = {
                          
                           // content:
                                12,       // revision
                                 0,       // classname
                                 0,    0, // classinfo
                                 3,   14, // methods
                                 0,    0, // properties
                                 0,    0, // enums/sets
                                 0,    0, // constructors
                                 0,       // flags
                                 0,       // signalCount
                          
                           // slots: name, argc, parameters, tag, flags, initial metatype offsets
                                 1,    0,   32,    2, 0x0a,    1 /* Public */,
                                 3,    0,   33,    2, 0x0a,    2 /* Public */,
                                 4,    0,   34,    2, 0x0a,    3 /* Public */,
                          
                           // slots: parameters
                              QMetaType::Void,
                              QMetaType::Void,
                              QMetaType::Void,
                          
                                 0        // eod
                          };
                          
                          Q_CONSTINIT const QMetaObject EngineMpv::staticMetaObject = { {
                              QMetaObject::SuperData::link<EngineBase::staticMetaObject>(),
                              qt_meta_stringdata_CLASSEngineMpvENDCLASS.offsetsAndSizes,
                              qt_meta_data_CLASSEngineMpvENDCLASS,
                              qt_static_metacall,
                              nullptr,
                              qt_incomplete_metaTypeArray<qt_meta_stringdata_CLASSEngineMpvENDCLASS_t,
                                  // Q_OBJECT / Q_GADGET
                                  QtPrivate::TypeAndForceComplete<EngineMpv, std::true_type>,
                                  // method 'volumeMute'
                                  QtPrivate::TypeAndForceComplete<void, std::false_type>,
                                  // method 'volumeInc'
                                  QtPrivate::TypeAndForceComplete<void, std::false_type>,
                                  // method 'volumeDec'
                                  QtPrivate::TypeAndForceComplete<void, std::false_type>
                              >,
                              nullptr
                          } };
                          
                          void EngineMpv::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a)
                          {
                              if (_c == QMetaObject::InvokeMetaMethod) {
                                  auto *_t = static_cast<EngineMpv *>(_o);
                                  (void)_t;
                                  switch (_id) {
                                  case 0: _t->volumeMute(); break;
                                  case 1: _t->volumeInc(); break;
                                  case 2: _t->volumeDec(); break;
                                  default: ;
                                  }
                              }
                              (void)_a;
                          }
                          
                          const QMetaObject *EngineMpv::metaObject() const
                          {
                              return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject;
                          }
                          
                          void *EngineMpv::qt_metacast(const char *_clname)
                          {
                              if (!_clname) return nullptr;
                              if (!strcmp(_clname, qt_meta_stringdata_CLASSEngineMpvENDCLASS.stringdata0))
                                  return static_cast<void*>(this);
                              if (!strcmp(_clname, "yarock.EngineBase/1.0"))
                                  return static_cast< EngineBase*>(this);
                              return EngineBase::qt_metacast(_clname);
                          }
                          
                          int EngineMpv::qt_metacall(QMetaObject::Call _c, int _id, void **_a)
                          {
                              _id = EngineBase::qt_metacall(_c, _id, _a);
                              if (_id < 0)
                                  return _id;
                              if (_c == QMetaObject::InvokeMetaMethod) {
                                  if (_id < 3)
                                      qt_static_metacall(this, _c, _id, _a);
                                  _id -= 3;
                              } else if (_c == QMetaObject::RegisterMethodArgumentMetaType) {
                                  if (_id < 3)
                                      *reinterpret_cast<QMetaType *>(_a[0]) = QMetaType();
                                  _id -= 3;
                              }
                              return _id;
                          }
                          
                          #ifdef QT_MOC_EXPORT_PLUGIN_V2
                          static constexpr unsigned char qt_pluginMetaDataV2_EngineMpv[] = {
                              0xbf, 
                              // "IID"
                              0x02,  0x69,  'E',  'n',  'g',  'i',  'n',  'e', 
                              'M',  'p',  'v', 
                              // "className"
                              0x03,  0x69,  'E',  'n',  'g',  'i',  'n',  'e', 
                              'M',  'p',  'v', 
                              0xff, 
                          };
                          QT_MOC_EXPORT_PLUGIN_V2(EngineMpv, EngineMpv, qt_pluginMetaDataV2_EngineMpv)
                          #else
                          QT_PLUGIN_METADATA_SECTION
                          Q_CONSTINIT static constexpr unsigned char qt_pluginMetaData_EngineMpv[] = {
                              'Q', 'T', 'M', 'E', 'T', 'A', 'D', 'A', 'T', 'A', ' ', '!',
                              // metadata version, Qt version, architectural requirements
                              0, QT_VERSION_MAJOR, QT_VERSION_MINOR, qPluginArchRequirements(),
                              0xbf, 
                              // "IID"
                              0x02,  0x69,  'E',  'n',  'g',  'i',  'n',  'e', 
                              'M',  'p',  'v', 
                              // "className"
                              0x03,  0x69,  'E',  'n',  'g',  'i',  'n',  'e', 
                              'M',  'p',  'v', 
                              0xff, 
                          };
                          QT_MOC_EXPORT_PLUGIN(EngineMpv, EngineMpv)
                          #endif  // QT_MOC_EXPORT_PLUGIN_V2
                          
                          QT_WARNING_POP
                          
                          sierdzioS Offline
                          sierdzioS Offline
                          sierdzio
                          Moderators
                          wrote on last edited by
                          #12

                          @sebaro so, problem solved?

                          (Z(:^

                          sebaroS 1 Reply Last reply
                          0
                          • sierdzioS sierdzio

                            @sebaro so, problem solved?

                            sebaroS Offline
                            sebaroS Offline
                            sebaro
                            wrote on last edited by
                            #13

                            @sierdzio
                            No

                            1 Reply Last reply
                            0
                            • sebaroS Offline
                              sebaroS Offline
                              sebaro
                              wrote on last edited by
                              #14
                              This post is deleted!
                              1 Reply Last reply
                              0
                              • sebaroS Offline
                                sebaroS Offline
                                sebaro
                                wrote on last edited by sebaro
                                #15

                                Changing to the previous minimum required version of cmake fixes this:

                                CMakeLists.txt

                                cmake_minimum_required(VERSION 2.8.6)
                                #cmake_minimum_required(VERSION 3.16)
                                

                                src/core/player/mpv/CMakeLists.txt

                                cmake_minimum_required(VERSION 2.6)
                                #cmake_minimum_required(VERSION 3.16)
                                

                                Seems to be this policy:
                                https://cmake.org/cmake/help/latest/policy/CMP0065.html

                                This fixed the issue with cmake 3.4+:

                                set_target_properties(yarock PROPERTIES ENABLE_EXPORTS TRUE)
                                
                                1 Reply Last reply
                                1
                                • sebaroS sebaro has marked this topic as solved on

                                • Login

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