LDFLAGS в файле Qt pro

У меня есть проект Qt, который я компилирую с GCC и MinGW для Ubuntu и Windows.

Я получил требование укрепить его, добавив следующие LDFLAGS:

  • Защита исполнения стека: LDFLAGS="-z noexecstack"
  • Перемещение и защита данных (RELRO): LDLFAGS="-z relro -z now"

Вопрос в том, можно ли это сделать с помощью файла .pro и как? Мне было легко добавить LFLAGS и CFLAGS в файл проекта, но я не смог найти ничего для LDFLAGS. Кажется, даже выходные файлы Makefile не имеют каких-либо определенных LDFLAGS.

Один способ, который я нашел после долгого поиска в Google, был добавить QMAKE_CFLAGS_RELEASE += "--noexecstack" в файле .pro, но я не уверен, что это правильный путь.

После строки выше, сгенерированный Makefile выглядит так:

CC            = gcc
CXX           = g++
DEFINES       = -DUNICODE -DMY_LIBRARY -DQT_NO_DEBUG -DQT_NETWORK_LIB -DQT_CORE_LIB
CFLAGS        = -pipe -fno-keep-inline-dllexport -O2 -fstack-protector-strong -O2 -D_FORTIFY_SOURCE=2 -Wformat -Wformat-security --noexecstack -Wall -Wextra $(DEFINES)
CXXFLAGS      = -pipe -fno-keep-inline-dllexport -O2 -frtti -Wall -Wextra -fexceptions -mthreads $(DEFINES)
LINKER        = g++
LFLAGS        = -Wl,-s -shared -Wl,-subsystem,windows -mthreads -Wl,--out-implib,C:\libmylib0.a

noexecstack появляется в CLFAGS список, но не уверен, что все в порядке. CFLAGS это не то же самое, что LDFLAGS, Кажется, он не проверяет команду, так как --thisdoesntexist казалось, прошел также, когда я пытался.

Заранее спасибо.

РЕДАКТИРОВАТЬ:

Основываясь на ответе Гвен, я попытался добавить QMAKE_LFLAGS += "-z noexecstack -z relro -z now" но это привело к ошибке из ld.exe:
error: unrecognized option '-z'

EDIT2:

Версии инструмента:

C:\Qt\Qt5.5.0\Tools\mingw492_32\bin>ld.exe -v
GNU ld (GNU Binutils) 2.24

C:\Qt\Qt5.5.0\Tools\mingw492_32\bin>g++.exe --version
g++.exe (i686-posix-dwarf-rev1, Built by MinGW-W64 project) 4.9.2

0

Решение

В моей конфигурации (компилятор QtCreator + Visual C ++) LFLAGS, определенные в make-файле, передаются компоновщику, в отличие от того, что указано в GNU делает документацию:

LDFLAGS
: Дополнительные флаги для компиляторов, когда они должны вызывать компоновщик […] LFLAGS
: Дополнительные флаги для Лекса.

Я думаю, вы должны попробовать добавить QMAKE_LFLAGS += "-z noexecstack -z relro -z now" в файл .pro, очистите папку сборки, перезапустите qmake и посмотрите, передана ли эта опция компоновщику.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]