Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Can't turn off gcc optimizer, Makefile from automake

I am trying to get ZBar in a debug session. I am able to do so, but I can't get the optimizer to turn off, so my debug session jumps around unexpectedly and many variables are labeled as optimized-out in Eclipse Indigo. I am running in Ubuntu.

I have tried adding -O0 as far right in any gcc call in the Makefiles as possible, since the last -O is the acting one. I used -Q --help=optimizers to find what to be looking for, but its output is a bit odd:

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

Obviously, I've been putting -O0 in several places. I don't have any experience with automake, which is used by ZBar. I'm trying to avoid having to make my own Makefile from scratch, are there any suggestions on where to look to disable the optimizer? I have already searched the Makefiles for all the -O's and any -f's related to optimization; I've found none. The project was cleaned after the Makefile modification attempts were made.

like image 250
vlad417 Avatar asked Mar 15 '12 17:03

vlad417


People also ask

How do I disable gcc optimization?

The gcc option -O enables different levels of optimization. Use -O0 to disable them and use -S to output assembly. -O3 is the highest level of optimization.

How do I disable stack protector?

Operation. -fno-stack-protector disables stack protection.

How do you remove stack smashing?

Emit extra code to check for buffer overflows, such as stack smashing attacks. This is done by adding a guard variable to functions with vulnerable objects. This includes functions that call alloca, and functions with buffers larger than 8 bytes.

What is Makefile am?

Makefile.am -- a user input file to automake. configure.in -- a user input file to autoconf. autoconf generates configure from configure.in. automake gererates Makefile.in from Makefile.am. configure generates Makefile from Makefile.in.


1 Answers

Disabling optimizations can most easily be done when you run configure, or when you run make. Either

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

or

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

should do what you want. If you set CFLAGS/CXXFLAGS during configure, those values will be used for all invocations of make that do not override them, while setting them at make time is a one-time deal.

like image 68
William Pursell Avatar answered Sep 30 '22 05:09

William Pursell