2

Ubuntu および Windows 用の GCC および MinGW でコンパイルしている Qt プロジェクトがあります。

次の LDFLAGS を追加して強化する必要があります。

  • スタック実行保護:LDFLAGS="-z noexecstack"
  • データの再配置と保護 (RELRO):LDLFAGS="-z relro -z now"

問題は、これを .pro ファイルで実行できるか、またその方法は? プロジェクト ファイルに LFLAGS と CFLAGS を簡単に追加できることがわかりましたが、LDFLAGS については何も見つかりませんでした。出力 Makefile でさえ、LDFLAGS が定義されていないようです。

長い間グーグルで調べた後に見つけた 1 つの方法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
4

1 に答える 1