- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个使用 GCC 和 MinGW 为 Ubuntu 和 Windows 编译的 Qt 项目。
I got a requirement to harden it by adding the following LDFLAGS:
- Stack execution protection:
LDFLAGS="-z noexecstack"
- Data relocation and protection (RELRO):
LDLFAGS="-z relro -z now"
问题是这可以用 .pro 文件完成吗?如何做?我发现在项目文件中添加 LFLAGS 和 CFLAGS 很容易,但找不到 LDFLAGS 的任何内容。甚至输出 Makefile 似乎也没有定义任何 LDFLAGS。
经过长时间谷歌搜索后,我发现一种方法是在 .pro 文件中添加 QMAKE_CFLAGS_RELEASE += "--noexecstack"
,但我不相信这是正确的方法。
在上面一行之后,生成的 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
在我尝试时似乎也通过了。
提前谢谢你。
编辑:
根据 Gwen 的回答,我尝试添加 QMAKE_LFLAGS += "-z noexecstack -z relro -z now"
但这会导致 ld.exe 出错:错误:无法识别的选项“-z”
编辑 2:
工具版本:
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
最佳答案
使用我的配置(QtCreator + Visual C++ 编译器),makefile 中定义的 LFLAGS 被提供给链接器,这与 GNU make documentation 中的说明相反:
LDFLAGS : Extra flags to give to compilers when they are supposed to invoke the linker[...] LFLAGS : Extra flags to give to Lex.
我认为你应该尝试添加 QMAKE_LFLAGS += "-z noexecstack -z relro -z now"
到你的 .pro 文件,清空你的构建文件夹,重新运行 qmake,看看是否选项已提供给链接器。
关于c++ - Qt pro 文件中的 LDFLAGS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36154925/
我创建了一个食谱,总结如下: do_install() { install -d ${D}/GreenTea cp ${S}/foo.sh ${D}/GreenTea cp ${S}/fo
我有一个项目的下一个结构: cruceGame/ src/ libCruceGame/... cruceGameCurses/... multi
我正在尝试使用 go build 来更新我项目中的一个变量: 完整项目路径: c:\goprojects\src\deployment\cl\apps\appName 从 c:\goprojects\
我有一个无法正确链接的 C 项目,我怀疑这是因为 gcc 传递给 ld 程序的 --as-needed 标志。由于该标志,gcc 将在 *.c 文件之前列为选项的任何链接库视为不必要的,并且不会链接它
我正在尝试建立一个名为 PBC 的库(基于配对的密码学)。而这个库需要另一个名为 GMP 的库。 -(GNU 多精度库)。 我的问题是正确安装GMP后,PBC给出了一个错误: gmp library
我正在使用以下标志编译程序并出现错误(运行 64 位操作系统): g++ -lm -lml -lcvaux -lhighgui -lcv -lcxcore main.o BRIEF.o -o BRIE
我在 OS X 10.6.2 上遇到 python-config --ldflags 问题。 使用我的非系统 python.org python 安装: robin-mbp:~ robince$ wh
我想在程序启动时打印构建时间,例如: package main import "fmt" var BuildTime string func main() { fmt.Println(Buil
一个快速的问题。我在示例 Makefile 中找到了“DLDFLAGS”和“LDFLAGS”。使用的编译器是gcc。看起来它们都用于链接器。我想知道它们之间有什么区别。 最佳答案 LDFLAGS通常设
我想在一个存储库中有多个二进制文件,但也想通过 ldflags 设置版本选项。 在存储库中只有一个二进制文件我没有问题,它可以工作,但是对于多个二进制文件的新结构似乎不起作用。 我在 github 上
根据操作系统的不同,我在configure.ac中定义了一个特殊的LDFLAGS: AC_CANONICAL_HOST if test "$host_os" = cygwin then LDF
我是 Linux 操作系统新手。我正在尝试使用 makefile 编译 .c 文件。必须链接数学库。我的 makefile 如下所示: CC=gcc CFLAGS=-Wall -lm all:clie
在 Makefile 中将库与 LDFLAGS 链接时,如何知道库的名称? 例如: libxml2.dylib 与 -lxml2 链接 libz.dylib 实际上命名为 zlib 与 -lz 链接
我有一个使用 GCC 和 MinGW 为 Ubuntu 和 Windows 编译的 Qt 项目。 I got a requirement to harden it by adding the foll
我已经阅读了一些安装,我需要正确设置环境变量LDFLAGS、LD_LIBRARY_PATHS和CXXFLAGS才能运行./compile.sh。但是,我不确定在那里提供什么路径。有人可以解释一下这些标
我想知道 AM_LDFLAGS 和 LDFLAGS 之间的区别,因为我遇到了错误 error: AM_LDFLAGS must be set with '=' before using '+=' 当我
如果我有两个具有相同库名称但存储在不同目录中的库(并且它们可能包含不同的代码)并且我在 makefile 的 LDFLAGS 变量中列出了这两个目录,链接器如何知道先看哪里以及先看哪个要使用的库?
我有一个这样的围棋程序: package main import "fmt" var version string func main() { fmt.Printf("Version %s\n
我正在 Windows 上使用 MSys 和 Mingw 构建一个 dll。项目的源码只提供了autogen.sh、configure.ac和makefile.am。要生成 makefile,运行 a
如何在 qt .pro 字段中添加 LDFLAGS? 考虑库文件夹和共享库(.so)位于 dir_path 文件夹中。 例如,添加这一行并不能解决问题 LIBS+= -Ldir_path -llibr
我是一名优秀的程序员,十分优秀!