class_docstr: Abstract base class to define the interface that must be implemented
  by real compiler classes.  Also has some utility methods used by
  several compiler classes.
  
  The basic idea behind a compiler abstraction class is that each
  instance can be used for all the compile/link steps in building a
  single project.  Thus, attributes common to all of those compile and
  link steps -- include directories, macros to define, libraries to link
  against, etc. -- are attributes of the compiler instance.  To allow for
  variability in how individual files are treated, most of those
  attributes may be varied on a per-compilation or per-link basis.
class_docstr_tok: ["Abstract","base","class","to","define","the","interface","that","must","be","implemented","by","real","compiler","classes",".","Also","has","some","utility","methods","used","by","several","compiler","classes",".","The","basic","idea","behind","a","compiler","abstraction","class","is","that","each","instance","can","be","used","for","all","the","compile\/link","steps","in","building","a","single","project",".","Thus",",","attributes","common","to","all","of","those","compile","and","link","steps","--","include","directories",",","macros","to","define",",","libraries","to","link","against",",","etc",".","--","are","attributes","of","the","compiler","instance",".","To","allow","for","variability","in","how","individual","files","are","treated",",","most","of","those","attributes","may","be","varied","on","a","per-compilation","or","per-link","basis","."]
docstr: Link a bunch of stuff together to create an executable or
  shared library file.
  
  The "bunch of stuff" consists of the list of object files supplied
  as 'objects'.  'output_filename' should be a filename.  If
  'output_dir' is supplied, 'output_filename' is relative to it
  (i.e. 'output_filename' can provide directory components if
  needed).
  
  'libraries' is a list of libraries to link against.  These are
  library names, not filenames, since they're translated into
  filenames in a platform-specific way (eg. "foo" becomes "libfoo.a"
  on Unix and "foo.lib" on DOS/Windows).  However, they can include a
  directory component, which means the linker will look in that
  specific directory rather than searching all the normal locations.
  
  'library_dirs', if supplied, should be a list of directories to
  search for libraries that were specified as bare library names
  (ie. no directory component).  These are on top of the system
  default and those supplied to 'add_library_dir()' and/or
  'set_library_dirs()'.  'runtime_library_dirs' is a list of
  directories that will be embedded into the shared library and used
  to search for other shared libraries that *it* depends on at
  run-time.  (This may only be relevant on Unix.)
  
  'export_symbols' is a list of symbols that the shared library will
  export.  (This appears to be relevant only on Windows.)
  
  'debug' is as for 'compile()' and 'create_static_lib()', with the
  slight distinction that it actually matters on most platforms (as
  opposed to 'create_static_lib()', which includes a 'debug' flag
  mostly for form's sake).
  
  'extra_preargs' and 'extra_postargs' are as for 'compile()' (except
  of course that they supply command-line arguments for the
  particular linker being used).
  
  'target_lang' is the target language for which the given objects
  are being compiled. This allows specific linkage time treatment of
  certain languages.
  
  Raises LinkError on failure.
code: def link(
      self,
      target_desc,
      objects,
      output_filename,
      output_dir=None,
      libraries=None,
      library_dirs=None,
      runtime_library_dirs=None,
      export_symbols=None,
      debug=0,
      extra_preargs=None,
      extra_postargs=None,
      build_temp=None,
      target_lang=None,
  ):
      """Link a bunch of stuff together to create an executable or
      shared library file.
  
      The "bunch of stuff" consists of the list of object files supplied
      as 'objects'.  'output_filename' should be a filename.  If
      'output_dir' is supplied, 'output_filename' is relative to it
      (i.e. 'output_filename' can provide directory components if
      needed).
  
      'libraries' is a list of libraries to link against.  These are
      library names, not filenames, since they're translated into
      filenames in a platform-specific way (eg. "foo" becomes "libfoo.a"
      on Unix and "foo.lib" on DOS/Windows).  However, they can include a
      directory component, which means the linker will look in that
      specific directory rather than searching all the normal locations.
  
      'library_dirs', if supplied, should be a list of directories to
      search for libraries that were specified as bare library names
      (ie. no directory component).  These are on top of the system
      default and those supplied to 'add_library_dir()' and/or
      'set_library_dirs()'.  'runtime_library_dirs' is a list of
      directories that will be embedded into the shared library and used
      to search for other shared libraries that *it* depends on at
      run-time.  (This may only be relevant on Unix.)
  
      'export_symbols' is a list of symbols that the shared library will
      export.  (This appears to be relevant only on Windows.)
  
      'debug' is as for 'compile()' and 'create_static_lib()', with the
      slight distinction that it actually matters on most platforms (as
      opposed to 'create_static_lib()', which includes a 'debug' flag
      mostly for form's sake).
  
      'extra_preargs' and 'extra_postargs' are as for 'compile()' (except
      of course that they supply command-line arguments for the
      particular linker being used).
  
      'target_lang' is the target language for which the given objects
      are being compiled. This allows specific linkage time treatment of
      certain languages.
  
      Raises LinkError on failure.
      """
      raise NotImplementedError
  
imports: import sys, os, re
  from distutils.errors import *
  from distutils.spawn import spawn
  from distutils.file_util import move_file
  from distutils.dir_util import mkpath
  from distutils.dep_util import newer_group
  from distutils.util import split_quoted, execute
  from distutils import log
label_desc: Use image node_id 30 for calling the CCompiler obj's underlying member method code with example usage: obj.link(target_desc, objects, output_filename, output_dir, libraries, library_dirs, runtime_library_dirs, export_symbols, debug, extra_preargs, extra_postargs, build_temp, target_lang) without return types