My program contains many externally defined variables. When I compile it with -O0 flag, I see them in the symbol table, but not when I use -O1 or -O2. How can I force the compil
If your foo.c only (essentially) has
extern const int my_symbol;
then compile it with -O1 or -O2, that symbol will be optimized out. However, if you use that symbol in foo.c, for example
extern const int my_symbol;
extern int my_flag;
void foo(void)
{
if (my_symbol)
my_flag = 1;
}
All of those symbols will exist in foo.o even if you compile it with -O1 or -O2.