Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. Mobile and Embedded
  4. QGCS error for Android
Forum Update on Monday, May 27th 2025

QGCS error for Android

Scheduled Pinned Locked Moved Unsolved Mobile and Embedded
21 Posts 2 Posters 1.3k Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • I InsideFPV

    @jsulm do we have to externally add and from where i can download this library , i am adding chatgpt solution but it will not resolve please give me solution if you have any idea for this like how to link..?

    jsulmJ Offline
    jsulmJ Offline
    jsulm
    Lifetime Qt Champion
    wrote on last edited by
    #4

    @InsideFPV said in QGCS error for Android:

    please give me solution

    Please answer my question first: do you link to libpng explicitly (in your CMakeLists.txt file)?

    https://forum.qt.io/topic/113070/qt-code-of-conduct

    I 1 Reply Last reply
    0
    • jsulmJ jsulm

      @InsideFPV said in QGCS error for Android:

      please give me solution

      Please answer my question first: do you link to libpng explicitly (in your CMakeLists.txt file)?

      I Offline
      I Offline
      InsideFPV
      wrote on last edited by
      #5

      @jsulm No sir
      I am adding full cmakelist.txt please check

      cmake_minimum_required(VERSION 3.25)

      list(APPEND CMAKE_MODULE_PATH
      ${CMAKE_SOURCE_DIR}/cmake
      ${CMAKE_SOURCE_DIR}/cmake/modules
      ${CMAKE_SOURCE_DIR}/cmake/find-modules
      )

      if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
      set(CMAKE_BUILD_TYPE Release CACHE STRING "Build type" FORCE)
      set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "Debug;Release")
      endif()

      set(CMAKE_REQUIRED_QUIET ON)

      #######################################################

      Custom Build Configuration

      #######################################################

      include(CustomOptions)

      if(IS_DIRECTORY ${CMAKE_SOURCE_DIR}/custom)
      message(STATUS "Enabling custom build")
      set(QGC_CUSTOM_BUILD ON)
      list(APPEND CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/custom/cmake)
      include(CustomOverrides)
      endif()

      #######################################################

      Project Info

      #######################################################

      set(CMAKE_OSX_ARCHITECTURES "arm64")

      set(CMAKE_OSX_SYSROOT "iphoneos")

      if(APPLE)
      set(CMAKE_OSX_DEPLOYMENT_TARGET "12.0")
      endif()

      include(Git)

      project(${QGC_APP_NAME}
      VERSION ${QGC_APP_VERSION}
      DESCRIPTION ${QGC_APP_DESCRIPTION}
      HOMEPAGE_URL "https://qgroundcontrol.com/"
      LANGUAGES C CXX
      )

      if(APPLE AND NOT IOS)
      set(MACOS TRUE)
      endif()

      #######################################################

      CMake Configuration Options

      #######################################################

      include(GNUInstallDirs)
      include(FetchContent)
      include(CMakePrintHelpers)

      set(CMAKE_CXX_STANDARD 20)
      set(CMAKE_CXX_STANDARD_REQUIRED ON)

      set(CMAKE_AUTOMOC ON)
      set(CMAKE_AUTOUIC ON)
      set(CMAKE_AUTORCC ON)

      set(CMAKE_INCLUDE_CURRENT_DIR ON)
      set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
      set(CMAKE_POSITION_INDEPENDENT_CODE ON)

      if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
      if(LINUX)
      set_property(CACHE CMAKE_INSTALL_PREFIX PROPERTY VALUE "${CMAKE_BINARY_DIR}/AppDir/usr")
      else()
      set_property(CACHE CMAKE_INSTALL_PREFIX PROPERTY VALUE "${CMAKE_BINARY_DIR}/staging")
      endif()
      endif()

      if(QGC_USE_CACHE)
      if(CMAKE_HOST_UNIX)
      find_program(CCACHE_PROGRAM ccache)
      if(CCACHE_PROGRAM)
      message(STATUS "Using CCache")
      set(CMAKE_C_COMPILER_LAUNCHER ${CCACHE_PROGRAM})
      set(CMAKE_CXX_COMPILER_LAUNCHER ${CCACHE_PROGRAM})
      if(APPLE)
      set(CMAKE_OBJC_COMPILER_LAUNCHER ${CCACHE_PROGRAM})
      endif()
      endif()
      elseif(CMAKE_HOST_WIN32)
      find_program(SCCACHE_PROGRAM sccache)
      if(SCCACHE_PROGRAM)
      message(STATUS "Using SCCache")
      set(CMAKE_C_COMPILER_LAUNCHER ${SCCACHE_PROGRAM})
      set(CMAKE_CXX_COMPILER_LAUNCHER ${SCCACHE_PROGRAM})
      endif()
      endif()
      endif()

      if(MSVC)
      set(CMAKE_MSVC_DEBUG_INFORMATION_FORMAT Embedded)
      endif()

      if(CMAKE_CROSSCOMPILING AND ANDROID)
      set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY BOTH)
      set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE BOTH)
      set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE BOTH)
      endif()

      set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/$<CONFIGURATION>/lib)
      set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/$<CONFIGURATION>)
      set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/$<CONFIGURATION>)

      https://cmake.org/cmake/help/latest/policy/CMP0168.html#policy:CMP0168

      if(POLICY CMP0168)
      cmake_policy(SET CMP0168 NEW)
      set(CMAKE_POLICY_DEFAULT_CMP0168 NEW)
      endif()

      https://cmake.org/cmake/help/latest/policy/CMP0075.html#policy:CMP0075

      if(POLICY CMP0075)
      cmake_policy(SET CMP0075 NEW)
      set(CMAKE_POLICY_DEFAULT_CMP0075 NEW)
      endif()

      if(QGC_USE_IWYU)
      include(IWYU)
      endif()

      #######################################################

      Qt6 Configuration

      #######################################################

      if(CMAKE_CROSSCOMPILING AND NOT IS_DIRECTORY ${QT_HOST_PATH})
      message(FATAL_ERROR "You need to set QT_HOST_PATH to cross compile Qt.")
      endif()

      find_program(QMAKE_EXECUTABLE NAMES qmake HINTS ${QT_ROOT_DIR} ${QTDIR} ENV QTDIR PATH_SUFFIXES bin)
      execute_process(COMMAND ${QMAKE_EXECUTABLE} -query QT_VERSION OUTPUT_VARIABLE QT_VERSION)
      if(QT_VERSION LESS QT_MINIMUM_VERSION)
      MESSAGE(FATAL_ERROR "Minimum supported Qt version: ${QT_MINIMUM_VERSION}.
      Installed version: ${QT_VERSION}")
      endif()

      add_compile_definitions(QT_DISABLE_DEPRECATED_UP_TO=0x060800)

      if(CMAKE_BUILD_TYPE STREQUAL "Release")
      add_compile_definitions(
      NDEBUG
      QT_NO_DEBUG
      QT_NO_DEBUG_OUTPUT
      )
      elseif(CMAKE_BUILD_TYPE STREQUAL "Debug")
      include(CTest)
      endif()

      if(ANDROID)
      list(APPEND QT_ANDROID_MULTI_ABI_FORWARD_VARS QGC_STABLE_BUILD QT_HOST_PATH)
      endif()

      find_package(Qt6
      ${QT_MINIMUM_VERSION}
      REQUIRED
      COMPONENTS
      Concurrent
      Core
      Core5Compat
      Location
      Multimedia
      Network
      OpenGL
      Positioning
      Qml
      QmlIntegration
      Quick
      QuickControls2
      QuickWidgets
      Sensors
      Sql
      Svg
      TextToSpeech
      Widgets
      Xml
      OPTIONAL_COMPONENTS
      Bluetooth
      Charts
      LinguistTools
      MultimediaQuickPrivate
      Quick3D
      Quick3DTools
      SerialPort
      Test
      HINTS
      ${QT_LIBRARY_HINTS}
      )

      if(LINUX)
      find_package(Qt6 ${QT_MINIMUM_VERSION} COMPONENTS WaylandClient)
      endif()

      Set extra standard project setup options for Qt 6.7.0 and above

      set(EXTRA_STANDARD_PROJECT_SETUP_OPTIONS)
      if(QT_VERSION VERSION_GREATER_EQUAL 6.8.2)
      list(APPEND EXTRA_STANDARD_PROJECT_SETUP_OPTIONS I18N_SOURCE_LANGUAGE en)
      endif()

      qt_standard_project_setup(
      REQUIRES ${QGC_QT_MINIMUM_VERSION}
      SUPPORTS_UP_TO ${QGC_QT_MAXIMUM_VERSION}
      ${EXTRA_STANDARD_PROJECT_SETUP_OPTIONS}
      )

      qt_policy(
      SET QTP0001 NEW
      SET QTP0002 NEW
      SET QTP0003 NEW
      SET QTP0004 NEW
      SET QTP0005 NEW
      )

      #######################################################

      QGroundControl Options

      #######################################################

      add_compile_definitions(
      $<$<NOT:$BOOL:${QGC_STABLE_BUILD}>:QGC_DAILY_BUILD>
      $<$BOOL:${QGC_BUILD_TESTING}:QGC_UNITTEST_BUILD>
      $<$BOOL:${QGC_DEBUG_QML}:QT_QML_DEBUG>
      $<$BOOL:${QGC_DISABLE_APM_MAVLINK}:QGC_NO_ARDUPILOT_DIALECT>
      $<$BOOL:${QGC_VIEWER3D}:QGC_VIEWER3D>
      )

      if(NOT QGC_BUILD_TESTING)
      set(BUILD_TESTING OFF CACHE INTERNAL "" FORCE)
      endif()

      if("${CMAKE_OSX_ARCHITECTURES}" MATCHES "arm64;x86_64" OR "${CMAKE_OSX_ARCHITECTURES}" MATCHES "x86_64;arm64")
      set(MACOS_UNIVERSAL_BUILD ON)
      endif()

      TODO: Force building dependencies if(NOT CMAKE_HOST_SYSTEM_PROCESSOR STREQUAL CMAKE_SYSTEM_PROCESSOR)?

      if(CMAKE_OSX_ARCHITECTURES AND NOT "${CMAKE_HOST_SYSTEM_PROCESSOR}" IN_LIST CMAKE_OSX_ARCHITECTURES)

      include(CPM)
      if(CMAKE_CROSSCOMPILING OR ANDROID OR MACOS_UNIVERSAL_BUILD)
      set(CPM_DOWNLOAD_ALL ON)
      endif()

      #######################################################

      Custom Build Configuration

      #######################################################

      if(QGC_CUSTOM_BUILD)
      add_subdirectory(custom)
      endif()

      #######################################################

      QGroundControl Resources

      #######################################################

      Note: Adding Resources to Library instead requires using Q_INIT_RESOURCE(qgcresources)

      if(NOT QGC_CUSTOM_BUILD)
      # Custom builds can override the resources
      list(APPEND QGC_RESOURCES
      ${CMAKE_SOURCE_DIR}/qgcimages.qrc
      ${CMAKE_SOURCE_DIR}/qgcresources.qrc
      ${CMAKE_SOURCE_DIR}/qgroundcontrol.qrc
      )
      endif()

      list(APPEND QGC_RESOURCES
      ${CMAKE_SOURCE_DIR}/resources/InstrumentValueIcons/InstrumentValueIcons.qrc
      ${CMAKE_SOURCE_DIR}/src/FirmwarePlugin/APM/APMResources.qrc
      ${CMAKE_SOURCE_DIR}/src/FirmwarePlugin/PX4/PX4Resources.qrc
      )

      if(QGC_UTM_ADAPTER)
      list(APPEND QGC_RESOURCES ${CMAKE_SOURCE_DIR}/src/UTMSP/utmsp.qrc)
      else()
      list(APPEND QGC_RESOURCES ${CMAKE_SOURCE_DIR}/src/UTMSP/dummy/utmsp_dummy.qrc)
      endif()

      if(QGC_BUILD_TESTING)
      list(APPEND QGC_RESOURCES ${CMAKE_SOURCE_DIR}/test/UnitTest.qrc)
      endif()

      #######################################################

      QGroundControl Target

      #######################################################

      qt_add_executable(${CMAKE_PROJECT_NAME}
      WIN32
      MACOSX_BUNDLE
      src/main.cc
      ${QGC_RESOURCES}
      )

      if(NOT ANDROID AND NOT IOS)
      target_sources(${CMAKE_PROJECT_NAME}
      PRIVATE
      src/RunGuard.cc
      src/RunGuard.h
      )
      endif()

      target_include_directories(${CMAKE_PROJECT_NAME} PRIVATE ${CMAKE_SOURCE_DIR}/src)

      if(Qt6LinguistTools_FOUND)
      file(GLOB TS_SOURCES ${CMAKE_SOURCE_DIR}/translations/qgc_*.ts)
      set_source_files_properties(${TS_SOURCES} PROPERTIES OUTPUT_LOCATION "${CMAKE_BINARY_DIR}/i18n")
      qt_add_translations(${CMAKE_PROJECT_NAME}
      # TS_FILE_BASE ${CMAKE_PROJECT_NAME}
      # TS_FILE_DIR ${CMAKE_SOURCE_DIR}/translations/
      TS_FILES ${TS_SOURCES}
      RESOURCE_PREFIX "/"
      LUPDATE_OPTIONS -no-obsolete
      )
      endif()

      set_target_properties(${CMAKE_PROJECT_NAME}
      PROPERTIES
      QT_RESOURCE_PREFIX "/qgc"
      OUTPUT_NAME ${CMAKE_PROJECT_NAME}
      )

      if(WIN32)
      # windows installer files shared with core and custom
      set(DEPLOY_WIN_FILES
      "${CMAKE_SOURCE_DIR}/deploy/windows/driver.msi"
      "${CMAKE_SOURCE_DIR}/deploy/windows/nullsoft_installer.nsi"
      "${CMAKE_SOURCE_DIR}/deploy/windows/QGroundControl.rc"
      "${QGC_WINDOWS_INSTALL_HEADER_PATH}"
      "${QGC_WINDOWS_ICON_PATH}"
      )

      # Destination directory where files will be copied
      set(QGC_INSTALLER_SOURCE_WIN "${CMAKE_BINARY_DIR}/deploy/windows")
      file(MAKE_DIRECTORY ${QGC_INSTALLER_SOURCE_WIN})
      foreach(FILE ${DEPLOY_WIN_FILES})
          # filename without the path
          get_filename_component(FILE_NAME ${FILE} NAME)
          # re-copy the file if it changes
          add_custom_command(
              OUTPUT "${QGC_INSTALLER_SOURCE_WIN}/${FILE_NAME}"
              COMMAND ${CMAKE_COMMAND} -E copy_if_different "${FILE}" "${QGC_INSTALLER_SOURCE_WIN}/${FILE_NAME}"
              DEPENDS "${FILE}"  # Depend on the source file so that it re-copies when it changes
          )
          list(APPEND QGC_INSTALLER_SOURCE_WIN_FILES "${QGC_INSTALLER_SOURCE_WIN}/${FILE_NAME}")
      endforeach()
      
      target_sources(${CMAKE_PROJECT_NAME} PRIVATE ${QGC_INSTALLER_SOURCE_WIN_FILES})
      set_target_properties(${CMAKE_PROJECT_NAME}
          PROPERTIES
              WIN32_EXECUTABLE TRUE
              QT_TARGET_RC_ICONS "${QGC_WINDOWS_ICON_PATH}"
      )
      add_compile_definitions(_USE_MATH_DEFINES)
      

      elseif(MACOS)
      set(MACOSX_BUNDLE_ICON_FILE "macx.icns")
      set(app_icon_macos "${QGC_MACOS_ICON_PATH}/macx.icns")
      set_source_files_properties(${app_icon_macos} PROPERTIES MACOSX_PACKAGE_LOCATION "Resources")
      target_sources(${CMAKE_PROJECT_NAME} PRIVATE ${app_icon_macos})
      set_target_properties(${CMAKE_PROJECT_NAME}
      PROPERTIES
      MACOSX_BUNDLE TRUE
      MACOSX_BUNDLE_INFO_PLIST "${CMAKE_SOURCE_DIR}/deploy/macos/MacOSXBundleInfo.plist.in"
      MACOSX_BUNDLE_BUNDLE_NAME "${CMAKE_PROJECT_NAME}"
      MACOSX_BUNDLE_BUNDLE_VERSION "${PROJECT_VERSION}"
      MACOSX_BUNDLE_COPYRIGHT "${QGC_APP_COPYRIGHT}"
      MACOSX_BUNDLE_GUI_IDENTIFIER "${QGC_BUNDLE_ID}"
      MACOSX_BUNDLE_ICON_FILE "macx.icns"
      MACOSX_BUNDLE_INFO_STRING "${QGC_APP_DESCRIPTION}"
      MACOSX_BUNDLE_LONG_VERSION_STRING "${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH}"
      MACOSX_BUNDLE_SHORT_VERSION_STRING "${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}"
      )
      elseif(IOS)
      enable_language(OBJC)

      set(CMAKE_XCODE_ATTRIBUTE_IPHONEOS_DEPLOYMENT_TARGET "14.0")
      set(CMAKE_XCODE_ATTRIBUTE_TARGETED_DEVICE_FAMILY "1,2") # iPhone,iPad
      set(CMAKE_XCODE_ATTRIBUTE_INFOPLIST_FILE "${CMAKE_CURRENT_SOURCE_DIR}/deploy/ios/iOS-Info.plist")
      
      set_target_properties(${CMAKE_PROJECT_NAME}
          PROPERTIES
              QT_IOS_LAUNCH_SCREEN ${CMAKE_SOURCE_DIR}/deploy/ios/QGCLaunchScreen.xib
              XCODE_ATTRIBUTE_PRODUCT_BUNDLE_IDENTIFIER "org.mavlink.qgroundcontrol"
              XCODE_ATTRIBUTE_PRODUCT_NAME ${CMAKE_PROJECT_NAME}
              XCODE_ATTRIBUTE_CURRENT_PROJECT_VERSION ${CMAKE_PROJECT_VERSION}
              XCODE_ATTRIBUTE_MARKETING_VERSION ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}
              XCODE_ATTRIBUTE_ASSETCATALOG_COMPILER_APPICON_NAME "AppIcon"
              XCODE_ATTRIBUTE_IPHONEOS_DEPLOYMENT_TARGET "14.0"
              XCODE_ATTRIBUTE_TARGETED_DEVICE_FAMILY "1,2" # iPhone,iPad
              XCODE_ATTRIBUTE_INFOPLIST_KEY_CFBundleDisplayName ${CMAKE_PROJECT_NAME}
              XCODE_ATTRIBUTE_INFOPLIST_KEY_LSApplicationCategoryType "public.app-category.mycategory"
              XCODE_ATTRIBUTE_GCC_GENERATE_DEBUGGING_SYMBOLS "YES"
      )
      
      # set(QT_NO_FFMPEG_XCODE_EMBED_FRAMEWORKS_CODE_SIGN_ON_COPY ON)
      qt_add_ios_ffmpeg_libraries(${CMAKE_PROJECT_NAME})
      

      elseif(ANDROID)
      include(CPM)
      CPMAddPackage(
      NAME android_openssl
      URL https://github.com/KDAB/android_openssl/archive/refs/heads/master.zip
      )
      include(${android_openssl_SOURCE_DIR}/android_openssl.cmake)
      add_android_openssl_libraries(${CMAKE_PROJECT_NAME})

      set(ANDROID_PLATFORM_ARCHITECTURE_CODE)
      if(${ANDROID_ABI} STREQUAL "armeabi-v7a")
          set(ANDROID_PLATFORM_ARCHITECTURE_CODE "032")
      elseif(${ANDROID_ABI} STREQUAL "arm64-v8a")
          set(ANDROID_PLATFORM_ARCHITECTURE_CODE "064")
      elseif(${ANDROID_ABI} STREQUAL "x86")
          set(ANDROID_PLATFORM_ARCHITECTURE_CODE "132")
      elseif(${ANDROID_ABI} STREQUAL "x86_64")
          set(ANDROID_PLATFORM_ARCHITECTURE_CODE "164")
      endif()
      set(ANDROID_VERSION_CODE "${ANDROID_PLATFORM_ARCHITECTURE_CODE}${PROJECT_VERSION_MAJOR}${PROJECT_VERSION_MINOR}")
      
      set_target_properties(${CMAKE_PROJECT_NAME}
          PROPERTIES
              # QT_ANDROID_ABIS ${ANDROID_ABI}
              QT_ANDROID_MIN_SDK_VERSION ${QGC_QT_ANDROID_MIN_SDK_VERSION}
              QT_ANDROID_TARGET_SDK_VERSION ${QGC_QT_ANDROID_TARGET_SDK_VERSION}
              QT_ANDROID_PACKAGE_NAME "${QGC_ANDROID_PACKAGE_NAME}"
              QT_ANDROID_PACKAGE_SOURCE_DIR "${QGC_ANDROID_PACKAGE_SOURCE_DIR}"
              QT_ANDROID_VERSION_NAME ${CMAKE_PROJECT_VERSION}
              QT_ANDROID_VERSION_CODE ${ANDROID_VERSION_CODE}
              QT_QML_ROOT_PATH ${CMAKE_SOURCE_DIR}
              # QT_ANDROID_SDK_BUILD_TOOLS_REVISION
              # QT_ANDROID_SYSTEM_LIBS_PREFIX
      )
      

      endif()

      add_compile_definitions(
      QGC_APP_NAME="${QGC_APP_NAME}"
      QGC_ORG_NAME="${QGC_ORG_NAME}"
      QGC_ORG_DOMAIN="${QGC_ORG_DOMAIN}"
      QGC_APP_VERSION_STR="${QGC_APP_VERSION_STR}"
      QGC_SETTINGS_VERSION=${QGC_SETTINGS_VERSION}
      )

      add_subdirectory(src)

      target_link_libraries(${CMAKE_PROJECT_NAME}
      PRIVATE
      Qt6::Core
      Qt6::Core5Compat
      Qt6::Quick
      Qt6::Svg
      Qt6::Widgets
      QGC
      QmlControls

      )

      target_link_libraries(QGroundControl
      PUBLIC
      -ljpeg
      -lpng
      )

      if(ANDROID)
      # Find JPEG library in NDK sysroot, Qt paths, or project paths
      find_library(JPEG_LIBRARY jpeg
      PATHS
      ${ANDROID_NDK}/sysroot/usr/lib/${ANDROID_ABI} # NDK sysroot for the ABI
      ${ANDROID_NDK}/platforms/android-${QGC_QT_ANDROID_MIN_SDK_VERSION}/arch-arm64/usr/lib # Alternative NDK path
      ${CMAKE_SOURCE_DIR}/libs/${ANDROID_ABI} # Project-specific libraries
      ${QT_LIBRARY_DIR} # Qt library directory (if applicable)
      NO_DEFAULT_PATH # Restrict to these paths only
      )

      # Find PNG library (you’ll need to do the same for PNG if it’s missing)
      find_library(PNG_LIBRARY png
          PATHS
              ${ANDROID_NDK}/sysroot/usr/lib/${ANDROID_ABI}
              ${ANDROID_NDK}/platforms/android-${QGC_QT_ANDROID_MIN_SDK_VERSION}/arch-arm64/usr/lib
              ${CMAKE_SOURCE_DIR}/libs/${ANDROID_ABI}
              ${QT_LIBRARY_DIR}
          NO_DEFAULT_PATH
      )
      
      # Check if libraries are found
      if(NOT JPEG_LIBRARY)
          message(WARNING "JPEG library not found. Ensure libjpeg is available for ${ANDROID_ABI}. Attempting to proceed without it.")
          # Optionally, you can specify a fallback path or disable linking if not critical
          # set(JPEG_LIBRARY "")  # Comment out or handle gracefully
      endif()
      if(NOT PNG_LIBRARY)
          message(WARNING "PNG library not found. Ensure libpng is available for ${ANDROID_ABI}. Attempting to proceed without it.")
          # set(PNG_LIBRARY "")  # Comment out or handle gracefully
      endif()
      
      # Link the libraries (only if found)
      if(JPEG_LIBRARY)
          target_link_libraries(${CMAKE_PROJECT_NAME} PRIVATE ${JPEG_LIBRARY})
      endif()
      if(PNG_LIBRARY)
          target_link_libraries(${CMAKE_PROJECT_NAME} PRIVATE ${PNG_LIBRARY})
      endif()
      
      # Continue with other Android-specific configurations
      target_sources(${CMAKE_PROJECT_NAME} PRIVATE ${CMAKE_SOURCE_DIR}/android/src/AndroidInit.cc)
      target_include_directories(${CMAKE_PROJECT_NAME} PRIVATE ${CMAKE_SOURCE_DIR}/android/src)
      
      target_link_libraries(${CMAKE_PROJECT_NAME}
          PRIVATE
              Qt6::Core
              Joystick
              Utilities
      )
      
      if(NOT QGC_NO_SERIAL_LINK)
          target_link_libraries(${CMAKE_PROJECT_NAME} PRIVATE Comms)
      endif()
      

      endif()
      #target_link_libraries(QGroundControl PRIVATE C:/libpng/build/libpng.a)

      if(QGC_BUILD_TESTING)
      add_subdirectory(test)
      target_link_libraries(${CMAKE_PROJECT_NAME} PRIVATE qgctest)
      endif()

      if(ANDROID)
      target_sources(${CMAKE_PROJECT_NAME} PRIVATE ${CMAKE_SOURCE_DIR}/android/src/AndroidInit.cc)

      target_link_libraries(${CMAKE_PROJECT_NAME}
          PRIVATE
              Qt6::Core
              Joystick
              Utilities
      )
      
      target_include_directories(${CMAKE_PROJECT_NAME} PRIVATE ${CMAKE_SOURCE_DIR}/android/src)
      
      if(NOT QGC_NO_SERIAL_LINK)
          target_link_libraries(${CMAKE_PROJECT_NAME} PRIVATE Comms)
      endif()
      

      endif()

      qt_import_plugins(${CMAKE_PROJECT_NAME}
      INCLUDE Qt6::QSvgPlugin
      EXCLUDE_BY_TYPE geoservices
      INCLUDE_BY_TYPE sqldrivers Qt6::QSQLiteDriverPlugin
      )

      include(Install)

      include(PrintSummary)

      jsulmJ 1 Reply Last reply
      0
      • I InsideFPV

        @jsulm No sir
        I am adding full cmakelist.txt please check

        cmake_minimum_required(VERSION 3.25)

        list(APPEND CMAKE_MODULE_PATH
        ${CMAKE_SOURCE_DIR}/cmake
        ${CMAKE_SOURCE_DIR}/cmake/modules
        ${CMAKE_SOURCE_DIR}/cmake/find-modules
        )

        if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
        set(CMAKE_BUILD_TYPE Release CACHE STRING "Build type" FORCE)
        set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "Debug;Release")
        endif()

        set(CMAKE_REQUIRED_QUIET ON)

        #######################################################

        Custom Build Configuration

        #######################################################

        include(CustomOptions)

        if(IS_DIRECTORY ${CMAKE_SOURCE_DIR}/custom)
        message(STATUS "Enabling custom build")
        set(QGC_CUSTOM_BUILD ON)
        list(APPEND CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/custom/cmake)
        include(CustomOverrides)
        endif()

        #######################################################

        Project Info

        #######################################################

        set(CMAKE_OSX_ARCHITECTURES "arm64")

        set(CMAKE_OSX_SYSROOT "iphoneos")

        if(APPLE)
        set(CMAKE_OSX_DEPLOYMENT_TARGET "12.0")
        endif()

        include(Git)

        project(${QGC_APP_NAME}
        VERSION ${QGC_APP_VERSION}
        DESCRIPTION ${QGC_APP_DESCRIPTION}
        HOMEPAGE_URL "https://qgroundcontrol.com/"
        LANGUAGES C CXX
        )

        if(APPLE AND NOT IOS)
        set(MACOS TRUE)
        endif()

        #######################################################

        CMake Configuration Options

        #######################################################

        include(GNUInstallDirs)
        include(FetchContent)
        include(CMakePrintHelpers)

        set(CMAKE_CXX_STANDARD 20)
        set(CMAKE_CXX_STANDARD_REQUIRED ON)

        set(CMAKE_AUTOMOC ON)
        set(CMAKE_AUTOUIC ON)
        set(CMAKE_AUTORCC ON)

        set(CMAKE_INCLUDE_CURRENT_DIR ON)
        set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
        set(CMAKE_POSITION_INDEPENDENT_CODE ON)

        if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
        if(LINUX)
        set_property(CACHE CMAKE_INSTALL_PREFIX PROPERTY VALUE "${CMAKE_BINARY_DIR}/AppDir/usr")
        else()
        set_property(CACHE CMAKE_INSTALL_PREFIX PROPERTY VALUE "${CMAKE_BINARY_DIR}/staging")
        endif()
        endif()

        if(QGC_USE_CACHE)
        if(CMAKE_HOST_UNIX)
        find_program(CCACHE_PROGRAM ccache)
        if(CCACHE_PROGRAM)
        message(STATUS "Using CCache")
        set(CMAKE_C_COMPILER_LAUNCHER ${CCACHE_PROGRAM})
        set(CMAKE_CXX_COMPILER_LAUNCHER ${CCACHE_PROGRAM})
        if(APPLE)
        set(CMAKE_OBJC_COMPILER_LAUNCHER ${CCACHE_PROGRAM})
        endif()
        endif()
        elseif(CMAKE_HOST_WIN32)
        find_program(SCCACHE_PROGRAM sccache)
        if(SCCACHE_PROGRAM)
        message(STATUS "Using SCCache")
        set(CMAKE_C_COMPILER_LAUNCHER ${SCCACHE_PROGRAM})
        set(CMAKE_CXX_COMPILER_LAUNCHER ${SCCACHE_PROGRAM})
        endif()
        endif()
        endif()

        if(MSVC)
        set(CMAKE_MSVC_DEBUG_INFORMATION_FORMAT Embedded)
        endif()

        if(CMAKE_CROSSCOMPILING AND ANDROID)
        set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY BOTH)
        set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE BOTH)
        set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE BOTH)
        endif()

        set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/$<CONFIGURATION>/lib)
        set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/$<CONFIGURATION>)
        set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/$<CONFIGURATION>)

        https://cmake.org/cmake/help/latest/policy/CMP0168.html#policy:CMP0168

        if(POLICY CMP0168)
        cmake_policy(SET CMP0168 NEW)
        set(CMAKE_POLICY_DEFAULT_CMP0168 NEW)
        endif()

        https://cmake.org/cmake/help/latest/policy/CMP0075.html#policy:CMP0075

        if(POLICY CMP0075)
        cmake_policy(SET CMP0075 NEW)
        set(CMAKE_POLICY_DEFAULT_CMP0075 NEW)
        endif()

        if(QGC_USE_IWYU)
        include(IWYU)
        endif()

        #######################################################

        Qt6 Configuration

        #######################################################

        if(CMAKE_CROSSCOMPILING AND NOT IS_DIRECTORY ${QT_HOST_PATH})
        message(FATAL_ERROR "You need to set QT_HOST_PATH to cross compile Qt.")
        endif()

        find_program(QMAKE_EXECUTABLE NAMES qmake HINTS ${QT_ROOT_DIR} ${QTDIR} ENV QTDIR PATH_SUFFIXES bin)
        execute_process(COMMAND ${QMAKE_EXECUTABLE} -query QT_VERSION OUTPUT_VARIABLE QT_VERSION)
        if(QT_VERSION LESS QT_MINIMUM_VERSION)
        MESSAGE(FATAL_ERROR "Minimum supported Qt version: ${QT_MINIMUM_VERSION}.
        Installed version: ${QT_VERSION}")
        endif()

        add_compile_definitions(QT_DISABLE_DEPRECATED_UP_TO=0x060800)

        if(CMAKE_BUILD_TYPE STREQUAL "Release")
        add_compile_definitions(
        NDEBUG
        QT_NO_DEBUG
        QT_NO_DEBUG_OUTPUT
        )
        elseif(CMAKE_BUILD_TYPE STREQUAL "Debug")
        include(CTest)
        endif()

        if(ANDROID)
        list(APPEND QT_ANDROID_MULTI_ABI_FORWARD_VARS QGC_STABLE_BUILD QT_HOST_PATH)
        endif()

        find_package(Qt6
        ${QT_MINIMUM_VERSION}
        REQUIRED
        COMPONENTS
        Concurrent
        Core
        Core5Compat
        Location
        Multimedia
        Network
        OpenGL
        Positioning
        Qml
        QmlIntegration
        Quick
        QuickControls2
        QuickWidgets
        Sensors
        Sql
        Svg
        TextToSpeech
        Widgets
        Xml
        OPTIONAL_COMPONENTS
        Bluetooth
        Charts
        LinguistTools
        MultimediaQuickPrivate
        Quick3D
        Quick3DTools
        SerialPort
        Test
        HINTS
        ${QT_LIBRARY_HINTS}
        )

        if(LINUX)
        find_package(Qt6 ${QT_MINIMUM_VERSION} COMPONENTS WaylandClient)
        endif()

        Set extra standard project setup options for Qt 6.7.0 and above

        set(EXTRA_STANDARD_PROJECT_SETUP_OPTIONS)
        if(QT_VERSION VERSION_GREATER_EQUAL 6.8.2)
        list(APPEND EXTRA_STANDARD_PROJECT_SETUP_OPTIONS I18N_SOURCE_LANGUAGE en)
        endif()

        qt_standard_project_setup(
        REQUIRES ${QGC_QT_MINIMUM_VERSION}
        SUPPORTS_UP_TO ${QGC_QT_MAXIMUM_VERSION}
        ${EXTRA_STANDARD_PROJECT_SETUP_OPTIONS}
        )

        qt_policy(
        SET QTP0001 NEW
        SET QTP0002 NEW
        SET QTP0003 NEW
        SET QTP0004 NEW
        SET QTP0005 NEW
        )

        #######################################################

        QGroundControl Options

        #######################################################

        add_compile_definitions(
        $<$<NOT:$BOOL:${QGC_STABLE_BUILD}>:QGC_DAILY_BUILD>
        $<$BOOL:${QGC_BUILD_TESTING}:QGC_UNITTEST_BUILD>
        $<$BOOL:${QGC_DEBUG_QML}:QT_QML_DEBUG>
        $<$BOOL:${QGC_DISABLE_APM_MAVLINK}:QGC_NO_ARDUPILOT_DIALECT>
        $<$BOOL:${QGC_VIEWER3D}:QGC_VIEWER3D>
        )

        if(NOT QGC_BUILD_TESTING)
        set(BUILD_TESTING OFF CACHE INTERNAL "" FORCE)
        endif()

        if("${CMAKE_OSX_ARCHITECTURES}" MATCHES "arm64;x86_64" OR "${CMAKE_OSX_ARCHITECTURES}" MATCHES "x86_64;arm64")
        set(MACOS_UNIVERSAL_BUILD ON)
        endif()

        TODO: Force building dependencies if(NOT CMAKE_HOST_SYSTEM_PROCESSOR STREQUAL CMAKE_SYSTEM_PROCESSOR)?

        if(CMAKE_OSX_ARCHITECTURES AND NOT "${CMAKE_HOST_SYSTEM_PROCESSOR}" IN_LIST CMAKE_OSX_ARCHITECTURES)

        include(CPM)
        if(CMAKE_CROSSCOMPILING OR ANDROID OR MACOS_UNIVERSAL_BUILD)
        set(CPM_DOWNLOAD_ALL ON)
        endif()

        #######################################################

        Custom Build Configuration

        #######################################################

        if(QGC_CUSTOM_BUILD)
        add_subdirectory(custom)
        endif()

        #######################################################

        QGroundControl Resources

        #######################################################

        Note: Adding Resources to Library instead requires using Q_INIT_RESOURCE(qgcresources)

        if(NOT QGC_CUSTOM_BUILD)
        # Custom builds can override the resources
        list(APPEND QGC_RESOURCES
        ${CMAKE_SOURCE_DIR}/qgcimages.qrc
        ${CMAKE_SOURCE_DIR}/qgcresources.qrc
        ${CMAKE_SOURCE_DIR}/qgroundcontrol.qrc
        )
        endif()

        list(APPEND QGC_RESOURCES
        ${CMAKE_SOURCE_DIR}/resources/InstrumentValueIcons/InstrumentValueIcons.qrc
        ${CMAKE_SOURCE_DIR}/src/FirmwarePlugin/APM/APMResources.qrc
        ${CMAKE_SOURCE_DIR}/src/FirmwarePlugin/PX4/PX4Resources.qrc
        )

        if(QGC_UTM_ADAPTER)
        list(APPEND QGC_RESOURCES ${CMAKE_SOURCE_DIR}/src/UTMSP/utmsp.qrc)
        else()
        list(APPEND QGC_RESOURCES ${CMAKE_SOURCE_DIR}/src/UTMSP/dummy/utmsp_dummy.qrc)
        endif()

        if(QGC_BUILD_TESTING)
        list(APPEND QGC_RESOURCES ${CMAKE_SOURCE_DIR}/test/UnitTest.qrc)
        endif()

        #######################################################

        QGroundControl Target

        #######################################################

        qt_add_executable(${CMAKE_PROJECT_NAME}
        WIN32
        MACOSX_BUNDLE
        src/main.cc
        ${QGC_RESOURCES}
        )

        if(NOT ANDROID AND NOT IOS)
        target_sources(${CMAKE_PROJECT_NAME}
        PRIVATE
        src/RunGuard.cc
        src/RunGuard.h
        )
        endif()

        target_include_directories(${CMAKE_PROJECT_NAME} PRIVATE ${CMAKE_SOURCE_DIR}/src)

        if(Qt6LinguistTools_FOUND)
        file(GLOB TS_SOURCES ${CMAKE_SOURCE_DIR}/translations/qgc_*.ts)
        set_source_files_properties(${TS_SOURCES} PROPERTIES OUTPUT_LOCATION "${CMAKE_BINARY_DIR}/i18n")
        qt_add_translations(${CMAKE_PROJECT_NAME}
        # TS_FILE_BASE ${CMAKE_PROJECT_NAME}
        # TS_FILE_DIR ${CMAKE_SOURCE_DIR}/translations/
        TS_FILES ${TS_SOURCES}
        RESOURCE_PREFIX "/"
        LUPDATE_OPTIONS -no-obsolete
        )
        endif()

        set_target_properties(${CMAKE_PROJECT_NAME}
        PROPERTIES
        QT_RESOURCE_PREFIX "/qgc"
        OUTPUT_NAME ${CMAKE_PROJECT_NAME}
        )

        if(WIN32)
        # windows installer files shared with core and custom
        set(DEPLOY_WIN_FILES
        "${CMAKE_SOURCE_DIR}/deploy/windows/driver.msi"
        "${CMAKE_SOURCE_DIR}/deploy/windows/nullsoft_installer.nsi"
        "${CMAKE_SOURCE_DIR}/deploy/windows/QGroundControl.rc"
        "${QGC_WINDOWS_INSTALL_HEADER_PATH}"
        "${QGC_WINDOWS_ICON_PATH}"
        )

        # Destination directory where files will be copied
        set(QGC_INSTALLER_SOURCE_WIN "${CMAKE_BINARY_DIR}/deploy/windows")
        file(MAKE_DIRECTORY ${QGC_INSTALLER_SOURCE_WIN})
        foreach(FILE ${DEPLOY_WIN_FILES})
            # filename without the path
            get_filename_component(FILE_NAME ${FILE} NAME)
            # re-copy the file if it changes
            add_custom_command(
                OUTPUT "${QGC_INSTALLER_SOURCE_WIN}/${FILE_NAME}"
                COMMAND ${CMAKE_COMMAND} -E copy_if_different "${FILE}" "${QGC_INSTALLER_SOURCE_WIN}/${FILE_NAME}"
                DEPENDS "${FILE}"  # Depend on the source file so that it re-copies when it changes
            )
            list(APPEND QGC_INSTALLER_SOURCE_WIN_FILES "${QGC_INSTALLER_SOURCE_WIN}/${FILE_NAME}")
        endforeach()
        
        target_sources(${CMAKE_PROJECT_NAME} PRIVATE ${QGC_INSTALLER_SOURCE_WIN_FILES})
        set_target_properties(${CMAKE_PROJECT_NAME}
            PROPERTIES
                WIN32_EXECUTABLE TRUE
                QT_TARGET_RC_ICONS "${QGC_WINDOWS_ICON_PATH}"
        )
        add_compile_definitions(_USE_MATH_DEFINES)
        

        elseif(MACOS)
        set(MACOSX_BUNDLE_ICON_FILE "macx.icns")
        set(app_icon_macos "${QGC_MACOS_ICON_PATH}/macx.icns")
        set_source_files_properties(${app_icon_macos} PROPERTIES MACOSX_PACKAGE_LOCATION "Resources")
        target_sources(${CMAKE_PROJECT_NAME} PRIVATE ${app_icon_macos})
        set_target_properties(${CMAKE_PROJECT_NAME}
        PROPERTIES
        MACOSX_BUNDLE TRUE
        MACOSX_BUNDLE_INFO_PLIST "${CMAKE_SOURCE_DIR}/deploy/macos/MacOSXBundleInfo.plist.in"
        MACOSX_BUNDLE_BUNDLE_NAME "${CMAKE_PROJECT_NAME}"
        MACOSX_BUNDLE_BUNDLE_VERSION "${PROJECT_VERSION}"
        MACOSX_BUNDLE_COPYRIGHT "${QGC_APP_COPYRIGHT}"
        MACOSX_BUNDLE_GUI_IDENTIFIER "${QGC_BUNDLE_ID}"
        MACOSX_BUNDLE_ICON_FILE "macx.icns"
        MACOSX_BUNDLE_INFO_STRING "${QGC_APP_DESCRIPTION}"
        MACOSX_BUNDLE_LONG_VERSION_STRING "${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH}"
        MACOSX_BUNDLE_SHORT_VERSION_STRING "${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}"
        )
        elseif(IOS)
        enable_language(OBJC)

        set(CMAKE_XCODE_ATTRIBUTE_IPHONEOS_DEPLOYMENT_TARGET "14.0")
        set(CMAKE_XCODE_ATTRIBUTE_TARGETED_DEVICE_FAMILY "1,2") # iPhone,iPad
        set(CMAKE_XCODE_ATTRIBUTE_INFOPLIST_FILE "${CMAKE_CURRENT_SOURCE_DIR}/deploy/ios/iOS-Info.plist")
        
        set_target_properties(${CMAKE_PROJECT_NAME}
            PROPERTIES
                QT_IOS_LAUNCH_SCREEN ${CMAKE_SOURCE_DIR}/deploy/ios/QGCLaunchScreen.xib
                XCODE_ATTRIBUTE_PRODUCT_BUNDLE_IDENTIFIER "org.mavlink.qgroundcontrol"
                XCODE_ATTRIBUTE_PRODUCT_NAME ${CMAKE_PROJECT_NAME}
                XCODE_ATTRIBUTE_CURRENT_PROJECT_VERSION ${CMAKE_PROJECT_VERSION}
                XCODE_ATTRIBUTE_MARKETING_VERSION ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}
                XCODE_ATTRIBUTE_ASSETCATALOG_COMPILER_APPICON_NAME "AppIcon"
                XCODE_ATTRIBUTE_IPHONEOS_DEPLOYMENT_TARGET "14.0"
                XCODE_ATTRIBUTE_TARGETED_DEVICE_FAMILY "1,2" # iPhone,iPad
                XCODE_ATTRIBUTE_INFOPLIST_KEY_CFBundleDisplayName ${CMAKE_PROJECT_NAME}
                XCODE_ATTRIBUTE_INFOPLIST_KEY_LSApplicationCategoryType "public.app-category.mycategory"
                XCODE_ATTRIBUTE_GCC_GENERATE_DEBUGGING_SYMBOLS "YES"
        )
        
        # set(QT_NO_FFMPEG_XCODE_EMBED_FRAMEWORKS_CODE_SIGN_ON_COPY ON)
        qt_add_ios_ffmpeg_libraries(${CMAKE_PROJECT_NAME})
        

        elseif(ANDROID)
        include(CPM)
        CPMAddPackage(
        NAME android_openssl
        URL https://github.com/KDAB/android_openssl/archive/refs/heads/master.zip
        )
        include(${android_openssl_SOURCE_DIR}/android_openssl.cmake)
        add_android_openssl_libraries(${CMAKE_PROJECT_NAME})

        set(ANDROID_PLATFORM_ARCHITECTURE_CODE)
        if(${ANDROID_ABI} STREQUAL "armeabi-v7a")
            set(ANDROID_PLATFORM_ARCHITECTURE_CODE "032")
        elseif(${ANDROID_ABI} STREQUAL "arm64-v8a")
            set(ANDROID_PLATFORM_ARCHITECTURE_CODE "064")
        elseif(${ANDROID_ABI} STREQUAL "x86")
            set(ANDROID_PLATFORM_ARCHITECTURE_CODE "132")
        elseif(${ANDROID_ABI} STREQUAL "x86_64")
            set(ANDROID_PLATFORM_ARCHITECTURE_CODE "164")
        endif()
        set(ANDROID_VERSION_CODE "${ANDROID_PLATFORM_ARCHITECTURE_CODE}${PROJECT_VERSION_MAJOR}${PROJECT_VERSION_MINOR}")
        
        set_target_properties(${CMAKE_PROJECT_NAME}
            PROPERTIES
                # QT_ANDROID_ABIS ${ANDROID_ABI}
                QT_ANDROID_MIN_SDK_VERSION ${QGC_QT_ANDROID_MIN_SDK_VERSION}
                QT_ANDROID_TARGET_SDK_VERSION ${QGC_QT_ANDROID_TARGET_SDK_VERSION}
                QT_ANDROID_PACKAGE_NAME "${QGC_ANDROID_PACKAGE_NAME}"
                QT_ANDROID_PACKAGE_SOURCE_DIR "${QGC_ANDROID_PACKAGE_SOURCE_DIR}"
                QT_ANDROID_VERSION_NAME ${CMAKE_PROJECT_VERSION}
                QT_ANDROID_VERSION_CODE ${ANDROID_VERSION_CODE}
                QT_QML_ROOT_PATH ${CMAKE_SOURCE_DIR}
                # QT_ANDROID_SDK_BUILD_TOOLS_REVISION
                # QT_ANDROID_SYSTEM_LIBS_PREFIX
        )
        

        endif()

        add_compile_definitions(
        QGC_APP_NAME="${QGC_APP_NAME}"
        QGC_ORG_NAME="${QGC_ORG_NAME}"
        QGC_ORG_DOMAIN="${QGC_ORG_DOMAIN}"
        QGC_APP_VERSION_STR="${QGC_APP_VERSION_STR}"
        QGC_SETTINGS_VERSION=${QGC_SETTINGS_VERSION}
        )

        add_subdirectory(src)

        target_link_libraries(${CMAKE_PROJECT_NAME}
        PRIVATE
        Qt6::Core
        Qt6::Core5Compat
        Qt6::Quick
        Qt6::Svg
        Qt6::Widgets
        QGC
        QmlControls

        )

        target_link_libraries(QGroundControl
        PUBLIC
        -ljpeg
        -lpng
        )

        if(ANDROID)
        # Find JPEG library in NDK sysroot, Qt paths, or project paths
        find_library(JPEG_LIBRARY jpeg
        PATHS
        ${ANDROID_NDK}/sysroot/usr/lib/${ANDROID_ABI} # NDK sysroot for the ABI
        ${ANDROID_NDK}/platforms/android-${QGC_QT_ANDROID_MIN_SDK_VERSION}/arch-arm64/usr/lib # Alternative NDK path
        ${CMAKE_SOURCE_DIR}/libs/${ANDROID_ABI} # Project-specific libraries
        ${QT_LIBRARY_DIR} # Qt library directory (if applicable)
        NO_DEFAULT_PATH # Restrict to these paths only
        )

        # Find PNG library (you’ll need to do the same for PNG if it’s missing)
        find_library(PNG_LIBRARY png
            PATHS
                ${ANDROID_NDK}/sysroot/usr/lib/${ANDROID_ABI}
                ${ANDROID_NDK}/platforms/android-${QGC_QT_ANDROID_MIN_SDK_VERSION}/arch-arm64/usr/lib
                ${CMAKE_SOURCE_DIR}/libs/${ANDROID_ABI}
                ${QT_LIBRARY_DIR}
            NO_DEFAULT_PATH
        )
        
        # Check if libraries are found
        if(NOT JPEG_LIBRARY)
            message(WARNING "JPEG library not found. Ensure libjpeg is available for ${ANDROID_ABI}. Attempting to proceed without it.")
            # Optionally, you can specify a fallback path or disable linking if not critical
            # set(JPEG_LIBRARY "")  # Comment out or handle gracefully
        endif()
        if(NOT PNG_LIBRARY)
            message(WARNING "PNG library not found. Ensure libpng is available for ${ANDROID_ABI}. Attempting to proceed without it.")
            # set(PNG_LIBRARY "")  # Comment out or handle gracefully
        endif()
        
        # Link the libraries (only if found)
        if(JPEG_LIBRARY)
            target_link_libraries(${CMAKE_PROJECT_NAME} PRIVATE ${JPEG_LIBRARY})
        endif()
        if(PNG_LIBRARY)
            target_link_libraries(${CMAKE_PROJECT_NAME} PRIVATE ${PNG_LIBRARY})
        endif()
        
        # Continue with other Android-specific configurations
        target_sources(${CMAKE_PROJECT_NAME} PRIVATE ${CMAKE_SOURCE_DIR}/android/src/AndroidInit.cc)
        target_include_directories(${CMAKE_PROJECT_NAME} PRIVATE ${CMAKE_SOURCE_DIR}/android/src)
        
        target_link_libraries(${CMAKE_PROJECT_NAME}
            PRIVATE
                Qt6::Core
                Joystick
                Utilities
        )
        
        if(NOT QGC_NO_SERIAL_LINK)
            target_link_libraries(${CMAKE_PROJECT_NAME} PRIVATE Comms)
        endif()
        

        endif()
        #target_link_libraries(QGroundControl PRIVATE C:/libpng/build/libpng.a)

        if(QGC_BUILD_TESTING)
        add_subdirectory(test)
        target_link_libraries(${CMAKE_PROJECT_NAME} PRIVATE qgctest)
        endif()

        if(ANDROID)
        target_sources(${CMAKE_PROJECT_NAME} PRIVATE ${CMAKE_SOURCE_DIR}/android/src/AndroidInit.cc)

        target_link_libraries(${CMAKE_PROJECT_NAME}
            PRIVATE
                Qt6::Core
                Joystick
                Utilities
        )
        
        target_include_directories(${CMAKE_PROJECT_NAME} PRIVATE ${CMAKE_SOURCE_DIR}/android/src)
        
        if(NOT QGC_NO_SERIAL_LINK)
            target_link_libraries(${CMAKE_PROJECT_NAME} PRIVATE Comms)
        endif()
        

        endif()

        qt_import_plugins(${CMAKE_PROJECT_NAME}
        INCLUDE Qt6::QSvgPlugin
        EXCLUDE_BY_TYPE geoservices
        INCLUDE_BY_TYPE sqldrivers Qt6::QSQLiteDriverPlugin
        )

        include(Install)

        include(PrintSummary)

        jsulmJ Offline
        jsulmJ Offline
        jsulm
        Lifetime Qt Champion
        wrote on last edited by
        #6

        @InsideFPV said in QGCS error for Android:

        target_link_libraries(QGroundControl
        PUBLIC
        -ljpeg
        -lpng
        )

        Yes, you're linking libpng.
        Was libpng found when running cmake?
        Where is libpng for Android located?

        https://forum.qt.io/topic/113070/qt-code-of-conduct

        I 1 Reply Last reply
        0
        • jsulmJ jsulm

          @InsideFPV said in QGCS error for Android:

          target_link_libraries(QGroundControl
          PUBLIC
          -ljpeg
          -lpng
          )

          Yes, you're linking libpng.
          Was libpng found when running cmake?
          Where is libpng for Android located?

          I Offline
          I Offline
          InsideFPV
          wrote on last edited by
          #7

          @jsulm i am adding only this code porting inside my cmake file.
          target_link_libraries(QGroundControl
          PUBLIC
          -ljpeg
          -lpng
          )

          I am getting gstreamer error and i ask chatgpt and it provide me this solution.
          As form your questing i understand i have to add libpng in my project but i didnt added that till now.(Am i right...?)
          please guide me how can i resolve it...?

          jsulmJ 1 Reply Last reply
          0
          • I InsideFPV

            @jsulm i am adding only this code porting inside my cmake file.
            target_link_libraries(QGroundControl
            PUBLIC
            -ljpeg
            -lpng
            )

            I am getting gstreamer error and i ask chatgpt and it provide me this solution.
            As form your questing i understand i have to add libpng in my project but i didnt added that till now.(Am i right...?)
            please guide me how can i resolve it...?

            jsulmJ Offline
            jsulmJ Offline
            jsulm
            Lifetime Qt Champion
            wrote on last edited by
            #8

            @InsideFPV said in QGCS error for Android:

            i have to add libpng in my project but i didnt added that till now

            You DID add it already! Just look at your CMakeLists.txt file.
            I repeat the questions you did not answer:
            Was libpng found when running cmake?
            Where is libpng for Android located?

            https://forum.qt.io/topic/113070/qt-code-of-conduct

            I 1 Reply Last reply
            0
            • jsulmJ jsulm

              @InsideFPV said in QGCS error for Android:

              i have to add libpng in my project but i didnt added that till now

              You DID add it already! Just look at your CMakeLists.txt file.
              I repeat the questions you did not answer:
              Was libpng found when running cmake?
              Where is libpng for Android located?

              I Offline
              I Offline
              InsideFPV
              wrote on last edited by InsideFPV
              #9

              @jsulm No libpng was not found while running cmake.
              and it is not presend in this location:
              "C:/Users/Software/AppData/Local/Android/Sdk/ndk/26.1.10909125/toolchains/llvm/prebuilt/windows-x86_64/sysroot/usr/lib/aarch64-linux-android"

              where will i get libpng ?

              jsulmJ 1 Reply Last reply
              0
              • I InsideFPV

                @jsulm No libpng was not found while running cmake.
                and it is not presend in this location:
                "C:/Users/Software/AppData/Local/Android/Sdk/ndk/26.1.10909125/toolchains/llvm/prebuilt/windows-x86_64/sysroot/usr/lib/aarch64-linux-android"

                where will i get libpng ?

                jsulmJ Offline
                jsulmJ Offline
                jsulm
                Lifetime Qt Champion
                wrote on last edited by
                #10

                @InsideFPV If Android NDK does not provide it you will have to build it by yourself from source.

                https://forum.qt.io/topic/113070/qt-code-of-conduct

                I 2 Replies Last reply
                0
                • jsulmJ jsulm

                  @InsideFPV If Android NDK does not provide it you will have to build it by yourself from source.

                  I Offline
                  I Offline
                  InsideFPV
                  wrote on last edited by
                  #11

                  @jsulm As i am using master clone.
                  As this is my first time doing I am struggling with steps. Can you guide me how to build it..?

                  1 Reply Last reply
                  0
                  • jsulmJ jsulm

                    @InsideFPV If Android NDK does not provide it you will have to build it by yourself from source.

                    I Offline
                    I Offline
                    InsideFPV
                    wrote on last edited by
                    #12

                    @jsulm hello sir please guide me how to build lpng file ?

                    jsulmJ 1 Reply Last reply
                    0
                    • I InsideFPV

                      @jsulm hello sir please guide me how to build lpng file ?

                      jsulmJ Offline
                      jsulmJ Offline
                      jsulm
                      Lifetime Qt Champion
                      wrote on last edited by
                      #13

                      @InsideFPV Take a look at https://github.com/julienr/libpng-android
                      Official description how to build: https://github.com/pnggroup/libpng/blob/libpng16/INSTALL

                      https://forum.qt.io/topic/113070/qt-code-of-conduct

                      I 1 Reply Last reply
                      0
                      • jsulmJ jsulm

                        @InsideFPV Take a look at https://github.com/julienr/libpng-android
                        Official description how to build: https://github.com/pnggroup/libpng/blob/libpng16/INSTALL

                        I Offline
                        I Offline
                        InsideFPV
                        wrote on last edited by
                        #14

                        @jsulm sir i am adding libpng.so and libpng.a on my ndk path that is below
                        C:\Users\Software\AppData\Local\Android\Sdk\ndk\26.1.10909125\toolchains\llvm\prebuilt\windows-x86_64\sysroot\usr\lib\aarch64-linux-android

                        but still getting error
                        Capture21.PNG Capture22.PNG Capture23.PNG

                        1 Reply Last reply
                        0
                        • jsulmJ Offline
                          jsulmJ Offline
                          jsulm
                          Lifetime Qt Champion
                          wrote on last edited by
                          #15

                          You're missing libjpeg library now. Install it.

                          https://forum.qt.io/topic/113070/qt-code-of-conduct

                          I 1 Reply Last reply
                          0
                          • jsulmJ jsulm

                            You're missing libjpeg library now. Install it.

                            I Offline
                            I Offline
                            InsideFPV
                            wrote on last edited by
                            #16

                            @jsulm where to find or build this library ?

                            jsulmJ 1 Reply Last reply
                            0
                            • I InsideFPV

                              @jsulm where to find or build this library ?

                              jsulmJ Offline
                              jsulmJ Offline
                              jsulm
                              Lifetime Qt Champion
                              wrote on last edited by
                              #17

                              @InsideFPV https://www.ijg.org/files/

                              https://forum.qt.io/topic/113070/qt-code-of-conduct

                              I 2 Replies Last reply
                              0
                              • jsulmJ jsulm

                                @InsideFPV https://www.ijg.org/files/

                                I Offline
                                I Offline
                                InsideFPV
                                wrote on last edited by
                                #18

                                @jsulm yes sir I am build this library but getting another error ..

                                Capture24.PNG Capture25.PNG

                                1 Reply Last reply
                                0
                                • jsulmJ jsulm

                                  @InsideFPV https://www.ijg.org/files/

                                  I Offline
                                  I Offline
                                  InsideFPV
                                  wrote on last edited by
                                  #19

                                  @jsulm hello sir
                                  please guide me for above error

                                  jsulmJ 1 Reply Last reply
                                  0
                                  • I InsideFPV

                                    @jsulm hello sir
                                    please guide me for above error

                                    jsulmJ Offline
                                    jsulmJ Offline
                                    jsulm
                                    Lifetime Qt Champion
                                    wrote on last edited by
                                    #20

                                    @InsideFPV Maybe you should ask QGCS project? It is not part of Qt...

                                    https://forum.qt.io/topic/113070/qt-code-of-conduct

                                    I 1 Reply Last reply
                                    0
                                    • jsulmJ jsulm

                                      @InsideFPV Maybe you should ask QGCS project? It is not part of Qt...

                                      I Offline
                                      I Offline
                                      InsideFPV
                                      wrote on last edited by
                                      #21

                                      @jsulm yes sir I am asking about QGCS project
                                      please help me for this

                                      1 Reply Last reply
                                      0

                                      • Login

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