newguy
newguy

Reputation: 617

How to tell what gcc/autotools options from CFLAGS also go in LDFLAGS?

I have some -f compiler options in CFLAGS like -fsanitize=address and someone suggested to me a while ago that I also put those options in LDFLAGS so I did. It hasn't caused any problems.

My question is how can I tell what compiler options from CFLAGS also should go in LDFLAGS? Is it just the -f prefixed options? Thanks

Upvotes: 0

Views: 372

Answers (1)

yugr
yugr

Reputation: 21878

I have some -f compiler options in CFLAGS like -fsanitize=address and someone suggested to me a while ago that I also put those options in LDFLAGS so I did. It hasn't caused any problems.

Not only it won't cause any problems but that's the only correct way to build sanitized program.

My question is how can I tell what compiler options from CFLAGS also should go in LDFLAGS? Is it just the -f prefixed options?

It won't hurt if you simply do

LDFLAGS = $(CFLAGS) $(LIBS)

Compiler driver (/usr/bin/gcc) knows which high-level options are for the linker so unnecessary options will be simply filtered out. In case you wonder how this happens, run gcc with -dumpspecs flag:

$ 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} ...

This looks a bit ugly but in reality that's just a mini-language for flag translation. Syntax details are given here (although I seriously doubt that you need need to know about them).

Upvotes: 1

Related Questions