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 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 Online
    JonBJ Online
    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 Online
        JonBJ Online
        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 Online
            JonBJ Online
            JonB
            wrote on last edited by
            #8

            @sebaro Fair enough.

            Christian EhrlicherC 1 Reply Last reply
            0
            • JonBJ JonB

              @sebaro Fair enough.

              Christian EhrlicherC Online
              Christian EhrlicherC Online
              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