Linking with library

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • Jim Johnson

    #1

    Linking with library

    C++ linking works by using Linker to combine object files into single
    exe file.

    Does each .cpp file compile to a single .obj file?

    If the .cpp code called functions in some library (.lib) does the
    Linker will extract the required .obj object file from the library and
    link together with other .obj file to form a EXE?

    So the EXE file can be think of a code file that merged all the .cpp
    (compiled to object) files together?

  • jason.cipriani@gmail.com

    #2
    Re: Linking with library

    On Mar 20, 12:32 am, Jim Johnson <aopiyy...@yaho o.comwrote:
    C++ linking works by using Linker to combine object files into single
    exe file.
    >
    Does each .cpp file compile to a single .obj file?
    Generally, yes.
    If the .cpp code called functions in some library (.lib) does the
    Linker will extract the required .obj object file from the library and
    link together with other .obj file to form a EXE?
    Yes. Although some linkers may not discard unused object files from
    the library; or may give you an option to make it not discard unused
    ones (which can sometimes be useful if you want your exe to also
    double as a dynamic link library [on Windows the file formats are the
    same], exporting functions from linked in libs even though it doesn't
    use those functions itself).
    >
    So the EXE file can be think of a code file that merged all the .cpp
    (compiled to object) files together?
    Pretty much. Generally the way it works is each source file compiles
    to an object file, and each of those object files contains a table of
    external symbols that it requires (such as functions called from that
    source file that are defined in other source files or libraries). The
    linker then goes through all of the object files, looking at the
    external references each requires, and resolves the external
    references by finding what other object files (some of which may be
    in .libs) export those symbols and linking it all together, doing some
    magic, and producing a final executable.

    Jason

    Comment

    • Paavo Helde

      #3
      Re: Linking with library

      Jim Johnson <aopiyy001@yaho o.comwrote in
      news:d6q3u31llo t0pf99u14u32uq1 jt5ehn3ad@4ax.c om:
      C++ linking works by using Linker to combine object files into single
      exe file.
      >
      Does each .cpp file compile to a single .obj file?
      Normally, yes.
      If the .cpp code called functions in some library (.lib) does the
      Linker will extract the required .obj object file from the library and
      link together with other .obj file to form a EXE?
      It may extract only single functions (and their dependencies) from a
      static lib or (next to) nothing from a dynamic lib. In the latter case
      the lib must be available at run-time, the actual linking then occurs by
      loading the dynamic lib into the memory, or later. Exact rules depend on
      the platform. (For example, the .obj and EXE extensions you mention are
      specific to a certain platform.)
      >
      So the EXE file can be think of a code file that merged all the .cpp
      (compiled to object) files together?
      >
      In old times, yes. Currently the widespread usage of dynamic linking and
      more recently link-time optimization and exported templates generation
      have made the process much more complicated.

      Best
      Paavo

      Comment

      Working...