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

    @JonB

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

    cd build
    cmake ..
    make
    

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

    CMakeLists.txt

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

    src/core/player/mpv/CMakeLists.txt

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

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

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

    Thanks

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

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

    I clean it after each code change

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

    sebaroS 1 Reply Last reply
    0
    • JonBJ JonB

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

      I clean it after each code change

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

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

      @JonB

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

      JonBJ 1 Reply Last reply
      1
      • sebaroS sebaro

        @JonB

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

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

        @sebaro Fair enough.

        Christian EhrlicherC 1 Reply Last reply
        0
        • JonBJ JonB

          @sebaro Fair enough.

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

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

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

          1 Reply Last reply
          0
          • sebaroS sebaro

            @JonB

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

            cd build
            cmake ..
            make
            

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

            CMakeLists.txt

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

            src/core/player/mpv/CMakeLists.txt

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

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

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

            Thanks

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

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

            In your cmake files, add this:

            set(CMAKE_AUTOMOC ON)
            

            (Z(:^

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

              Automoc was set to true, added CMAKE_AUTOMOC:

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

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

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

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

              moc_engine_base.cpp

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

              moc_engine_mpv.cpp

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

                Automoc was set to true, added CMAKE_AUTOMOC:

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

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

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

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

                moc_engine_base.cpp

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

                moc_engine_mpv.cpp

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

                @sebaro so, problem solved?

                (Z(:^

                sebaroS 1 Reply Last reply
                0
                • sierdzioS sierdzio

                  @sebaro so, problem solved?

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

                  @sierdzio
                  No

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

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

                      CMakeLists.txt

                      cmake_minimum_required(VERSION 2.8.6)
                      #cmake_minimum_required(VERSION 3.16)
                      

                      src/core/player/mpv/CMakeLists.txt

                      cmake_minimum_required(VERSION 2.6)
                      #cmake_minimum_required(VERSION 3.16)
                      

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

                      This fixed the issue with cmake 3.4+:

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

                      • Login

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