Проблема сборки CMAKE Qt проекта в Linux в командной строке - собирается ELF shared

Детали проблемы:

  1. Есть проект на Qt, сборка с помощью cmake. Собирается (в QtDesigner) и работает нормально и в Windows и в Linux (использую для теста Mint 21 x64 - Vanessa);
  2. В Windows сборка из командной строки - нормально, собирается как и ожидалось;
  3. При переносе в Linux zip-архивом, как и указано в п.1 QtCreator собирает проект нормально. Работает как из под отладчика так и автономно, запускаясь из "проводника" Linux;
  4. Однако при сборке через командную строку Linux после сборки получается elf shared object, который имея флаг "исполняемый" запускается и работает ТОЛЬКО из командной строки, а "проводник" его не воспринимает как исполняемый.

Предполагаю, что при сборке в среде QtCreator что-то добавляется к cmake, однако по своей природной несообразительности никак не могу понять что, где, куда и когда. Покурив гугл выяснил, что "возможно gcc настроен не так а иначе" :).

Прошу помощи.

cmakelist.txt:

cmake_minimum_required(VERSION 3.5)
message("[INFO] CMake version: " ${CMAKE_VERSION})
#cmake.exe -DCMAKE_PREFIX_PATH:PATH=C:/Qt/Qt5/5.14.2/mingw73_64 -DCMAKE_C_COMPILER:FILEPATH=C:/Qt/Qt5/Tools/mingw730_64/bin/gcc.exe -DCMAKE_CXX_COMPILER:FILEPATH=C:/Qt/Qt5/Tools/mingw730_64/bin/g++.exe
project(my_prj LANGUAGES CXX)

set(CMAKE_INCLUDE_CURRENT_DIR ON)

set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
#set(CMAKE_GENERATOR "MinGW MakeFiles")

if (WIN32)
    message("[INFO] Build Windows revision!")
    find_package(QT NAMES Qt5 COMPONENTS Widgets svg REQUIRED)
    find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Widgets svg REQUIRED)
    find_package(PostgreSQL REQUIRED)
endif(WIN32)

if (UNIX AND NOT APPLE)
    message("[INFO] Build Linux revision!")
    message("[WARN] Qt SVG module removed from required package.")
    find_package(QT NAMES Qt5 COMPONENTS Widgets REQUIRED)
    find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Widgets REQUIRED)
    find_package(PostgreSQL REQUIRED)
endif()


message("[INFO] PostgreSQL VER: " ${PostgreSQL_VERSION_STRING})
message("[INFO] Include files PostgreSQL: " ${PostgreSQL_INCLUDE_DIRS})
message("[INFO] Lib files PostgreSQL: " ${PostgreSQL_LIBRARY_DIRS})

set(PROJECT_SOURCES
        src/main.cpp
        src/winmain.cpp
        src/winmain.h
        src/winmain.ui
        src/resource/resources.qrc
        #-- общие модули расширения функционала
        src/common/classes/validators.h
 
 ... (очень много файлов)

)

include_directories(AFTER ${PostgreSQL_INCLUDE_DIRS})
link_directories(AFTER ${PostgreSQL_LIBRARY_DIRS})

if(${QT_VERSION_MAJOR} GREATER_EQUAL 6)
    qt_add_executable(my_prj ${PROJECT_SOURCES})
else()
    add_executable(my_prj ${PROJECT_SOURCES})
endif()

if (WIN32)
    #сборка под Windows
    target_link_libraries(my_prj PRIVATE Qt${QT_VERSION_MAJOR}::Widgets libpq)
endif(WIN32)

if (UNIX AND NOT APPLE)
    #сборка под Linux (различие в библиотеках)
    target_link_libraries(my_prj PRIVATE Qt${QT_VERSION_MAJOR}::Widgets pq)
endif()

Ответы (1 шт):

Автор решения: Ingvar

проблема решилась добавлением

target_link_options (my_prj PUBLIC "-no-pie")

в последний if скрипта cmake

→ Ссылка