strip [ -F bfdname | --target= bfdname ] [ -I bfdname | --input-target= bfdname ] [ -O bfdname | --output-target= bfdname ] [ -s | --strip-all ] [ -S | -g | -d | --strip-debug ] [ --strip-dwo ] [ -K symbolname | --keep-symbol= symbolname ] [ -M | --merge-notes ][ --no-merge-notes ] [ -N symbolname | --strip-symbol= symbolname ] [ -w | --wildcard ] [ -x | --discard-all ] [ -X | --discard-locals ] [ -R sectionname | --remove-section= sectionname ] [ --remove-relocations= sectionpattern ] [ -o file ] [ -p | --preserve-dates ] [ -D | --enable-deterministic-archives ] [ -U | --disable-deterministic-archives ] [ --keep-file-symbols ] [ --only-keep-debug ] [ -v | --verbose ] [ -V | --version ] [ --help ] [ --info ] objfile ...
gnu strip discards all symbols from object files objfile . The list of object files may include archives. At least one object file must be given.
strip modifies the files named in its argument, rather than writing modified copies under different names.
If the first character of sectionpattern is the exclamation point (!) then matching sections will not be removed even if an earlier use of --remove-section on the same command line would otherwise remove it. For example:
will remove all sections matching the pattern '.text.*', but will not remove the section '.text.foo'.
will remove the relocations for all sections matching the patter '.text.*'.
If the first character of sectionpattern is the exclamation point (!) then matching sections will not have their relocation removed even if an earlier use of --remove-relocations on the same command line would otherwise cause the relocations to be removed. For example:
will remove all relocations for sections matching the pattern '.text.*', but will not remove relocations for the section '.text.foo'.
was configured with
, then this mode is on by default. It can be disabled with the ‘
’ option, below.
This is the default unless
was configured with
-w -K !foo -K fo*
would cause strip to only keep symbols that start with the letters “fo”, but to discard the symbol “foo”.
Note - the section headers of the stripped sections are preserved, including their sizes, but the contents of the section are discarded. The section headers are preserved so that other tools can match up the debuginfo file with the real executable, even if that executable has been relocated to a different address space.
The intention is that this option will be used in conjunction with --add-gnu-debuglink to create a two part executable. One a stripped binary which will occupy less space in RAM and in a distribution and the second a debugging information file which is only needed if debugging abilities are required. The suggested procedure to create these files is as follows:
objcopy --only-keep-debug foo foo.dbgto create a file containing the debugging info.
objcopy --strip-debug footo create a stripped executable.
objcopy --add-gnu-debuglink=foo.dbg footo add a link to the debugging info into the stripped executable.
Note—the choice of
as an extension for the debug info file is arbitrary. Also the
step is optional. You could instead do this:
strip --strip-debug foo
objcopy --add-gnu-debuglink=foo.full foo
i.e., the file pointed to by the --add-gnu-debuglink can be the full executable. It does not have to be a file created by the --only-keep-debug switch.
Note—this switch is only intended for use on fully linked files. It does not make sense to use it on object files where the debugging information may be incomplete. Besides the gnu_debuglink feature currently only supports the presence of one filename containing debugging information, not multiple filenames on a one-per-object-file basis.