使用clang和safe-stack标志编译可执行文件的方法

4
我正在尝试使用clang-3.7(也尝试过3.8(dev))和-fsanitize = safe-stack标志编译一个简单的hello-world可执行文件。如此处所述(http://clang.llvm.org/docs/SafeStack.html),我需要将此标志传递给编译器和链接器。
“要启用SafeStack,只需将-fsanitize = safe-stack标志传递给编译和链接命令行。”
我尝试了以下命令来编译可执行文件:
clang-3.7 -fsanitize=safe-stack -o a.out -Wl,-fsanitize=safe-stack test.c

但是链接器告诉我,如果我向链接器传递-f标志,则需要将其编译为共享库(-shared)。

/usr/bin/ld: -f may not be used without -shared

我该如何使用-fsanitize=safe-stack标志编译可执行文件


你尝试过移除“-Wl,-fsanitize=safe-stack”吗? - user253751
1个回答

2
通过“将其传递给编译和链接命令行”,文档的意思是在编译和链接时都要传递它。这并不意味着使用-Wl,该选项会直接传递给链接器 - -f与链接器完全无关。
在这种情况下,
clang-3.7 -fsanitize=safe-stack -o a.out test.c

足够了。如果您使用单独的命令执行来编译和链接,则需要在两者都传递:

clang-3.7 -fsanitize=safe-stack -c -o test.o test.c
clang-3.7 -fsanitize=safe-stack -o a.out test.o

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接