2012-03-15 16 views
9

Sto cercando di ottenere ZBar in una sessione di debug. Sono in grado di farlo, ma non riesco a spegnere l'ottimizzatore, quindi la mia sessione di debug salta inaspettatamente e molte variabili sono etichettate come optimized-out in Eclipse Indigo. Sono in esecuzione su Ubuntu.Impossibile disattivare gcc optimizer, Makefile da automake

Ho provato ad aggiungere -O0 per quanto possibile corretto in qualsiasi chiamata gcc nei Makefile possibile, poiché l'ultimo -O è quello recitazione. Ho usato -Q --help = ottimizzatori per trovare ciò che per essere alla ricerca di, ma la sua uscita è un po 'strano:

libtool: compile: gcc -DHAVE_CONFIG_H -I. -I./include -I./zbar -I./include -O0 -O0 -Q --help=optimizers -Wall -Wno-parentheses -O0 -g -O0 -Q --help=optimizers -MT zbar/zbar_libzbar_la-config.lo -MD -MP -MF zbar/.deps/zbar_libzbar_la-config.Tpo -c zbar/config.c -fPIC -DPIC -o zbar/.libs/zbar_libzbar_la-config.o 
The following options control optimizations: 
make[1]: *** [zbar/zbar_libzbar_la-config.lo] Error 1 
    -O<number>       
make: *** [all] Error 2 
    -Ofast        
    -Os        
    -falign-functions     [disabled] 
    -falign-jumps      [disabled] 
    -falign-labels     [disabled] 
    -falign-loops      [disabled] 
    -fasynchronous-unwind-tables  [enabled] 
    -fbranch-count-reg    [enabled] 
    -fbranch-probabilities   [disabled] 
    -fbranch-target-load-optimize  [disabled] 
    -fbranch-target-load-optimize2 [disabled] 
    -fbtr-bb-exclusive    [disabled] 
    -fcaller-saves     [disabled] 
    -fcombine-stack-adjustments  [disabled] 
    -fcommon       [enabled] 
    -fcompare-elim     [disabled] 

etc... 

Ovviamente, Ho messo -O0 in più punti. Non ho alcuna esperienza con automake, che è usato da ZBar. Sto cercando di evitare di dover creare il mio Makefile da zero, ci sono suggerimenti su dove cercare di disattivare l'ottimizzatore? Ho già cercato i Makefile per tutti gli -O e tutti gli -f relativi all'ottimizzazione; Non ho trovato nessuno. Il progetto è stato pulito dopo i tentativi di modifica del Makefile.

risposta

18

La disattivazione delle ottimizzazioni può essere eseguita più facilmente quando si esegue configure o quando si esegue make. In entrambi i

configure CFLAGS='-g -O0' CXXFLAGS='-g -O0' 

o

make CFLAGS='-g -O0' CXXFLAGS='-g -O0' clean all 

dovrebbe fare quello che vuoi. Se si impostano CFLAGS/CXXFLAGS durante la configurazione, tali valori verranno utilizzati per tutte le chiamate di make che non li sovrascrivono, mentre impostandoli in fase di produzione è un deal una tantum.

+2

Nessuno dei due ha un effetto. Si noti che non sono l'autore del codice e sto semplicemente cercando di completare un'analisi algoritmica. Mettere il -O0 con la chiamata make mette quello -O0 davanti a qualsiasi altro flag per abilitare l'ottimizzazione, rendendolo non efficace. Non vedo alcun flag di ottimizzazione impostato nelle migliaia di righe del codice Makefile ... – vlad417

+0

CFLAGS dovrebbe essere l'ultimo elemento impostato in COMPILE nel makefile, quindi a meno che il manutentore del pacchetto non stia tentando di impostare CFLAGS (che dovrebbe essere segnalato come un bug) l'impostazione dovrebbe essere l'ultima. Se si esegue "CFLAGS = -questo-opzione-è-un-errore", tale opzione viene visualizzata durante la compilazione? –

+0

Quando aggiungo la falsa bandiera ottengo: 'gcc: errore: opzione non riconosciuta '-questo-opzione-è-un-errore'' – vlad417