Forum > General
Strip.exe Command Line Parameters
Curt Carpenter:
Is there a guide to all of the command line options for strip.exe? It appears to have a rich set of options, but I haven't been able to find any documentation on them.
Thanks for any help.
Blaazen:
I have no windows. Here you have output from Linux (manual page).
--- Code: ---$ man strip
STRIP(1) GNU Development Tools STRIP(1)
NAME
strip - Discard symbols from object files.
SYNOPSIS
strip [-F bfdname |--target=bfdname]
[-I bfdname |--input-target=bfdname]
[-O bfdname |--output-target=bfdname]
[-s|--strip-all]
[-S|-g|-d|--strip-debug]
[-K symbolname |--keep-symbol=symbolname]
[-N symbolname |--strip-symbol=symbolname]
[-w|--wildcard]
[-x|--discard-all] [-X |--discard-locals]
[-R sectionname |--remove-section=sectionname]
[-o file] [-p|--preserve-dates]
[--keep-file-symbols]
[--only-keep-debug]
[-v |--verbose] [-V|--version]
[--help] [--info]
objfile...
DESCRIPTION
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.
OPTIONS
-F bfdname
--target=bfdname
Treat the original objfile as a file with the object code
format bfdname, and rewrite it in the same format.
--help
Show a summary of the options to strip and exit.
--info
Display a list showing all architectures and object
formats available.
-I bfdname
--input-target=bfdname
Treat the original objfile as a file with the object code
format bfdname.
-O bfdname
--output-target=bfdname
Replace objfile with a file in the output format bfdname.
-R sectionname
--remove-section=sectionname
Remove any section named sectionname from the output file.
This option may be given more than once. Note that using
this option inappropriately may make the output file
unusable.
-s
--strip-all
Remove all symbols.
-g
-S
-d
--strip-debug
Remove debugging symbols only.
--strip-unneeded
Remove all symbols that are not needed for relocation
processing.
-K symbolname
--keep-symbol=symbolname
When stripping symbols, keep symbol symbolname even if it
would normally be stripped. This option may be given more
than once.
-N symbolname
--strip-symbol=symbolname
Remove symbol symbolname from the source file. This option
may be given more than once, and may be combined with
strip options other than -K.
-o file
Put the stripped output in file, rather than replacing the
existing file. When this argument is used, only one
objfile argument may be specified.
-p
--preserve-dates
Preserve the access and modification dates of the file.
-w
--wildcard
Permit regular expressions in symbolnames used in other
command line options. The question mark (?), asterisk
(*), backslash (\) and square brackets ([]) operators can
be used anywhere in the symbol name. If the first
character of the symbol name is the exclamation point (!)
then the sense of the switch is reversed for that symbol.
For example:
-w -K !foo -K fo*
would cause strip to only keep symbols that start with the
letters "fo", but to discard the symbol "foo".
-x
--discard-all
Remove non-global symbols.
-X
--discard-locals
Remove compiler-generated local symbols. (These usually
start with L or ..)
--keep-file-symbols
When stripping a file, perhaps with --strip-debug or
--strip-unneeded, retain any symbols specifying source
file names, which would otherwise get stripped.
--only-keep-debug
Strip a file, removing contents of any sections that would
not be stripped by --strip-debug and leaving the debugging
sections intact. In ELF files, this preserves all note
sections in the output.
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:
1.<Link the executable as normal. Assuming that is is
called>
"foo" then...
1.<Run "objcopy --only-keep-debug foo foo.dbg" to>
create a file containing the debugging info.
1.<Run "objcopy --strip-debug foo" to create a>
stripped executable.
1.<Run "objcopy --add-gnu-debuglink=foo.dbg foo">
to add a link to the debugging info into the stripped
executable.
Note---the choice of ".dbg" as an extension for the debug
info file is arbitrary. Also the "--only-keep-debug" step
is optional. You could instead do this:
1.<Link the executable as normal.>
1.<Copy "foo" to "foo.full">
1.<Run "strip --strip-debug foo">
1.<Run "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.
-V
--version
Show the version number for strip.
-v
--verbose
Verbose output: list all object files modified. In the
case of archives, strip -v lists all members of the
archive.
@file
Read command-line options from file. The options read are
inserted in place of the original @file option. If file
does not exist, or cannot be read, then the option will be
treated literally, and not removed.
Options in file are separated by whitespace. A whitespace
character may be included in an option by surrounding the
entire option in either single or double quotes. Any
character (including a backslash) may be included by
prefixing the character to be included with a backslash.
The file may itself contain additional @file options; any
such options will be processed recursively.
SEE ALSO
the Info entries for binutils.
COPYRIGHT
Copyright (c) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008,
2009, 2010 Free Software Foundation, Inc.
Permission is granted to copy, distribute and/or modify this
document under the terms of the GNU Free Documentation
License, Version 1.3 or any later version published by the
Free Software Foundation; with no Invariant Sections, with no
Front-Cover Texts, and with no Back-Cover Texts. A copy of
the license is included in the section entitled "GNU Free
Documentation License".
binutils-2.21.0 2011-04-18 STRIP(1)
--- End code ---
Curt Carpenter:
Thank you -- that's helpful.
After experimenting for a while, I think some of the options don't work (eg. -O) when running under windows.
If anyone knows otherwise and I'm just messing up my command line, I'd be please to hear!
Otherwise, the usage strip.exe -s <filename> works fine under windows.
BigChimp:
What info do you get if you run
--- Code: ---strip --help
--- End code ---
Curt Carpenter:
I get the same list of command line options that appear if I run strip.exe with no parameters, but I'm still not clear on what the options mean, or if they all work on a windows platform (I'm pretty sure they don't, but it may just be my lack of understanding on what they're supposed to do). I haven't been able to figure out how to use the input and output file options, for example.
I'm not a unix user, and suspect that that may be at the root of my difficulty. However -- I've written a small windows wrapper for the strip.exe program that lets me get the job done with the various options I want, and without using any of the stip options except -s. (Would still like to understand better how to use the tool though -- pretty impressive results. My strip wrapper program goes from 12MB with debug info. down to 1.6MB after strip!)
Thanks for the inputs. After a week of exploration, I'm hugely impressed with what Lazarus can do.
Navigation
[0] Message Index
[#] Next page