STRIP(1)                                                 STRIP(1)



NAME
       strip - remove symbols

SYNOPSIS
       strip [ option ] name ...

DESCRIPTION
       strip removes or modifies the symbol table attached to the
       output of the assembler and link editor.  This  is  useful
       to  save  space  after  a program has been debugged and to
       limit dynamically bound symbols.

       strip no longer removes relocation entries under any  con-
       dition.   Instead,  it  updates  the  external  relocation
       entries (and indirect symbol table entries) to reflect the
       resulting symbol table.  strip prints an error message for
       those symbols not in the resulting symbol table  that  are
       needed by an external relocation entry or an indirect sym-
       bol table.  The link editor ld(1) is the only program that
       can  strip relocation entries and know if it is safe to do
       so.

       When strip is used with no options on an executable  file,
       it  checks  that  file  to see if it uses the dynamic link
       editor.  If it does, the effect of the  strip  command  is
       the  same as using the -u and -r options. If the file does
       not use the dynamic link editor, the effect of strip with-
       out  any  options  is  the  same as using the -s option of
       ld(1).  The options -S, -x, and -X have the same effect as
       the  ld(1)  options.   The options to strip(1) can be com-
       bined to trim the symbol table to just what is desired.

       You should trim  the  symbol  table  of  files  used  with
       dynamic  linking so that only those symbols intended to be
       external interfaces are saved.  Files  used  with  dynamic
       linking include executables, objects that are loaded (usu-
       ally bundles), and dynamic shared libraries.  Only  global
       symbols  are  used  by  the  dynamic  linking process. You
       should strip all non-global symbols.

       When an executable is built with all its dependent dynamic
       shared libraries, it is typically stripped with:
              % strip -u -r executable
       which  saves all undefined symbols (usually defined in the
       dynamic shared libraries) and all global  symbols  defined
       in  the executable referenced by the dynamic libraries (as
       marked by the static link editor when the  executable  was
       built).  This is the maximum level of striping for an exe-
       cutable that will still allow the program to run correctly
       with its libraries.

       If  the executable loads objects, however, the global sym-
       bols that the objects reference from the  executable  also
       must  not  be stripped.  In this case, you should list the
       global symbols that the  executable  wants  to  allow  the
       objects  to  reference in a file, and those global symbols
       are then saved when the executable is stripped. For  exam-
       ple:
              % strip -u -r -s interface_symbols executable
       where  the file interface_symbols would contain only those
       global symbols from the  executable  that  the  executable
       wants the loaded objects to have access to.

       For  objects  that  will be loaded into an executable, you
       should trim the symbol table to limit the  global  symbols
       the executable will see.  This would be done with:
              % strip -s interface_symbols -u object
       which  would  leave only the undefined symbols and symbols
       listed in the file interface_symbols in the  object  file.
       In  this case, strip(1) has updated the relocation entries
       and indirect symbol table to reflect the new symbol table.

       For  dynamic shared libraries, the maximum level of strip-
       ping is usually -x (to remove all non-global symbols).

STRIPPING FILES FOR USE WITH RUNTIME LOADED CODE
       Trimming the symbol table for programs that load  code  at
       runtime  allows you to control the interface that the exe-
       cutable wants to provide to the objects that it will load;
       it  will  not have to publish symbols that are not part of
       its interface.  For example, an executable that wishes  to
       allow  only  a subset of its global symbols but all of the
       statically linked shared  library's  globals  to  be  used
       would be stripped with:
              % strip -s interface_symbols -A executable
       where  the file interface_symbols would contain only those
       symbols from the executable that it wishes the code loaded
       at  runtime  to  have  access  to.   Another example is an
       object that is made up of a number of other  objects  that
       will  be  loaded  into  an executable would built and then
       stripped with:
              % ld -o relocatable.o -r a.o b.o c.o
              % strip -s interface_symbols -u relocatable.o
       which would leave only the undefined symbols  and  symbols
       listed  in  the file interface_symbols in the object file.
       In this case strip(1) has updated the  relocation  entries
       to reflect the new symbol table.

OPTIONS
       The  first  set of options indicate symbols that are to be
       save in the resulting output file.

       -u     Save all undefined symbols.  This is  intended  for
              use   with  relocatable  objects  to  save  symbols
              referred to by external relocation  entries.   Note
              that  common symbols are also referred to by exter-
              nal relocation entries and this flag does not  save
              those symbols.

       -r     Save all symbols referenced dynamically.

       -s filename
              Save  the  symbol table entries for the global sym-
              bols listed in filename.  The symbol  names  listed
              in  filename  must  be  one  per  line. Leading and
              trailing white space are not  part  of  the  symbol
              name.   Lines  starting  with # are ignored, as are
              lines with only white space.

       -R filename
              Remove the symbol table entries for the global sym-
              bols  listed  in  filename.  This file has the same
              format as  the  -s  filename  option  above.   This
              option  is  usually  used in combination with other
              options that save some symbols, -S, -x, etc.

       -i     Ignore symbols listed in  the  -s  filename  or  -R
              filename  options  that  are not in the files to be
              stripped (this is normally an error).

       -d filename
              Save the debugging symbol table  entries  for  each
              source  file  name  listed in filename.  The source
              file names listed in filename must be one per  line
              with  no  other  white space in the file except the
              newlines on the end of each line.  And they must be
              just  the  base name of the source file without any
              leading directories.

       -A     Save all global absolute symbols except those  with
              a  value  of  zero, and save Objective C class sym-
              bols.  This is intended for use  of  programs  that
              load  code  at  runtime and want the loaded code to
              use symbols from the shared libraries (this is only
              used with NEXTSTEP 3.3 and earlier releases).

       -n     Save  all  N_SECT global symbols.  This is intended
              for use with  executable  programs  in  combination
              with  -A  to  remove the symbols needed for correct
              static link editing which are not  needed  for  use
              with  runtime loading interfaces where using the -s
              filename would be too much trouble  (this  is  only
              used with NEXTSTEP 3.3 and earlier releases).

       These  options  specify  symbols  to  be  removed from the
       resulting output file.

       -S     Remove the debugging symbol  table  entries  (those
              created by the -g option to cc(1) and other compil-
              ers).

       -X     Remove the local symbols  whose  names  begin  with
              `L'.

       -x     Remove  all  local symbols (saving only global sym-
              bols).

       And the last options:

       -      Treat all remaining arguments as file names and not
              options.

       -o output
              Write the result into the file output.

SEE ALSO
       ld(1), cc(1)

LIMITATIONS
       Not  every layout of a Mach-O file can be stripped by this
       program.  But all layouts produced by the  Apple  compiler
       system can be stripped.



Apple Computer, Inc.     October 29, 2001                STRIP(1)