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 2.3k 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.
  • JonBJ JonB

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

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

    @JonB

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

    cd build
    cmake ..
    make
    

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

    CMakeLists.txt

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

    src/core/player/mpv/CMakeLists.txt

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

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

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

    Thanks

    JonBJ sierdzioS 2 Replies Last reply
    0
    • sebaroS sebaro

      @JonB

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

      cd build
      cmake ..
      make
      

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

      CMakeLists.txt

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

      src/core/player/mpv/CMakeLists.txt

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

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

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

      Thanks

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

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

      I clean it after each code change

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

      sebaroS 1 Reply Last reply
      0
      • JonBJ JonB

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

        I clean it after each code change

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

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

        @JonB

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

        JonBJ 1 Reply Last reply
        1
        • sebaroS sebaro

          @JonB

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

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

          @sebaro Fair enough.

          Christian EhrlicherC 1 Reply Last reply
          0
          • JonBJ JonB

            @sebaro Fair enough.

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

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

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

            1 Reply Last reply
            0
            • sebaroS sebaro

              @JonB

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

              cd build
              cmake ..
              make
              

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

              CMakeLists.txt

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

              src/core/player/mpv/CMakeLists.txt

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

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

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

              Thanks

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

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

              In your cmake files, add this:

              set(CMAKE_AUTOMOC ON)
              

              (Z(:^

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

                Automoc was set to true, added CMAKE_AUTOMOC:

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

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

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

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

                moc_engine_base.cpp

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

                moc_engine_mpv.cpp

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

                  Automoc was set to true, added CMAKE_AUTOMOC:

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

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

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

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

                  moc_engine_base.cpp

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

                  moc_engine_mpv.cpp

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

                  @sebaro so, problem solved?

                  (Z(:^

                  sebaroS 1 Reply Last reply
                  0
                  • sierdzioS sierdzio

                    @sebaro so, problem solved?

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

                    @sierdzio
                    No

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

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

                        CMakeLists.txt

                        cmake_minimum_required(VERSION 2.8.6)
                        #cmake_minimum_required(VERSION 3.16)
                        

                        src/core/player/mpv/CMakeLists.txt

                        cmake_minimum_required(VERSION 2.6)
                        #cmake_minimum_required(VERSION 3.16)
                        

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

                        This fixed the issue with cmake 3.4+:

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

                        • Login

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