Linking with library

J

jason.cipriani

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
 
J

Jim Johnson

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?
 
P

Paavo Helde

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
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,769
Messages
2,569,581
Members
45,056
Latest member
GlycogenSupporthealth

Latest Threads

Top