如何判断CFLAGS中的gcc / autotools选项是否也适用于LDFLAGS?

时间:2017-03-18 06:05:55

标签: gcc ld autotools ldflags

我在-f中有一些CFLAGS编译器选项,例如-fsanitize=address,有人在不久前向我建议我也将这些选项放在LDFLAGS中,所以我做了。它没有造成任何问题。

我的问题是如何判断CFLAGSLDFLAGS的编译器选项是什么?它只是-f前缀选项吗?感谢

1 个答案:

答案 0 :(得分:1)

  

我在CFLAGS中有一些-f编译器选项,比如-fsanitize = address和   有人在不久前向我建议我也把这些选项放在LDFLAGS中   所以我做了。它没有造成任何问题。

不仅不会造成任何问题,而且这是建立消毒程序的唯一正确方法。

  

我的问题是如何判断CFLAGS中的编译器选项   也应该进入LDFLAGS?它只是-f前缀选项吗?

如果你只是做

就不会受到伤害
LDFLAGS = $(CFLAGS) $(LIBS)

编译器驱动程序(/usr/bin/gcc)知道链接器的哪些高级选项,因此将简单地过滤掉不必要的选项。如果您想知道这是如何发生的,请使用-dumpspecs标志运行gcc:

$ gcc -dumpspecs
...
*link_command:
%{!fsyntax-only:%{!c:%{!M:%{!MM:%{!E:%{!S:    %(linker) %{!fno-use-linker-plugin:%{!fno-lto:     -plugin %(linker_plugin_file)     -plugin-opt=%(lto_wrapper)     -plugin-opt=-fresolution=%u.res     %{!nostdlib:%{!nodefaultlibs:%:pass-through-libs(%(link_gcc_c_sequence))}}     }}%{flto|flto=*:%<fcompare-debug*}     %{flto} %{fno-lto} %{flto=*} %l %{no-pie:} %{pie:-pie} ...

这看起来有点难看,但实际上这只是一种用于旗帜翻译的迷你语言。语法详细信息给出here(尽管我非常怀疑您需要了解它们)。