467,075 Members | 975 Online
Bytes | Developer Community
Ask Question

Home New Posts Topics Members FAQ

Post your question to a community of 467,075 developers. It's quick & easy.

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?

Mar 20 '08 #1
  • viewed: 2014
Share:
2 Replies
On Mar 20, 12:32 am, Jim Johnson <aopiyy...@yahoo.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
Mar 20 '08 #2
Jim Johnson <ao*******@yahoo.comwrote in
news:d6********************************@4ax.com:
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
Mar 20 '08 #3

This discussion thread is closed

Replies have been disabled for this discussion.

Similar topics

20 posts views Thread by Steven T. Hatton | last post: by
6 posts views Thread by Rudy Ray Moore | last post: by
1 post views Thread by Kay | last post: by
2 posts views Thread by Mohsen A. Momeni | last post: by
By using this site, you agree to our Privacy Policy and Terms of Use.