2017-03-18 2 views
0

J'ai quelques -f options de compilateur dans CFLAGS comme -fsanitize=address et quelqu'un m'a suggéré il ya un moment que j'ai également mis ces options dans LDFLAGS alors je l'ai fait. Cela n'a causé aucun problème.Comment savoir quelles sont les options gcc/autotools de CFLAGS dans LDFLAGS?

Ma question est comment puis-je savoir quelles options de compilation de CFLAGS devrait également aller dans LDFLAGS? Est-ce seulement les -f options préfixées? Merci

Répondre

1

J'ai quelques options du compilateur -f dans CFLAGS comme -fsanitize = adresse et quelqu'un m'a suggéré il y a un moment que je aussi mettre ces options LDFLAGS donc je l'ai fait. Cela n'a causé aucun problème.

Non seulement cela ne causera pas de problèmes, mais c'est la seule façon correcte de construire un programme désinfecté.

Ma question est comment puis-je savoir quelles options de compilateur de CFLAGS devraient également aller dans LDFLAGS? Est-ce juste les options préfixées -f?

Il ne fera pas mal si vous faites simplement

LDFLAGS = $(CFLAGS) $(LIBS) 

pilote du compilateur (/usr/bin/gcc) connaît les options de haut niveau sont pour l'éditeur de liens, donc les options inutiles seront simplement filtrés. Si vous demandez comment cela se produit, exécutez gcc avec -dumpspecs drapeau:

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

Cela ressemble un peu laid, mais en réalité, c'est juste une mini-langue pour la traduction de drapeau. Les détails de la syntaxe sont donnés here (bien que je doute sérieusement que vous avez besoin de savoir à leur sujet).