What is the difference between "gcc -s" and a "strip" command?

gcc, strip, symbols

Solution

`gcc` being a compiler/linker, its `-s` option is something done while linking. It's also not configurable - it has a set of information which it removes, no more no less.

`strip` is something which can be run on an object file which is already compiled. It also has a variety of command-line options which you can use to configure which information will be removed. For example, `-g` strips only the debug information which `gcc -g` adds.

Note that `strip` is not a bash command, though you may be running it from a bash shell. It is a command totally separate from bash, part of the GNU binary utilities suite.

Problem

I wonder what is the difference between these two: `gcc -s`: Remove all symbol table and relocation information from the executable. `strip`: Discard symbols from object files. Do they have the same meaning? Which one do you use to: - reduce the size of executable? - speed up its running?

Original source

Related problems