Mandalika's scratchpad [ Work blog @Oracle | Stock Market Notes | My Music Compositions ]

Old Posts: 09.04  10.04  11.04  12.04  01.05  02.05  03.05  04.05  05.05  06.05  07.05  08.05  09.05  10.05  11.05  12.05  01.06  02.06  03.06  04.06  05.06  06.06  07.06  08.06  09.06  10.06  11.06  12.06  01.07  02.07  03.07  04.07  05.07  06.07  08.07  09.07  10.07  11.07  12.07  01.08  02.08  03.08  04.08  05.08  06.08  07.08  08.08  09.08  10.08  11.08  12.08  01.09  02.09  03.09  04.09  05.09  06.09  07.09  08.09  09.09  10.09  11.09  12.09  01.10  02.10  03.10  04.10  05.10  06.10  07.10  08.10  09.10  10.10  11.10  12.10  01.11  02.11  03.11  04.11  05.11  07.11  08.11  09.11  10.11  11.11  12.11  01.12  02.12  03.12  04.12  05.12  06.12  07.12  08.12  09.12  10.12  11.12  12.12  01.13  02.13  03.13  04.13  05.13  06.13  07.13  08.13  09.13  10.13  11.13  12.13  01.14  02.14  03.14  04.14  05.14  06.14  07.14  09.14  10.14  11.14  12.14  01.15  02.15  03.15  04.15  06.15  09.15  12.15  01.16  03.16  04.16  05.16  06.16  07.16  08.16  09.16  12.16  01.17  02.17  03.17  04.17  06.17  07.17  08.17 


Monday, January 10, 2005
 
Life cycle of a C/C++ program

1) Write the program


eg.,

int main (int argc, char *argv[]) {
printf ("Hello World");
}

2) Compile the program

When the program gets compiled, the compiler realizes that the current compile unit (ie., the simple C program in this case) has no implementation for printf(), and therefore produces an entry in the object file's symbol table saying that printf() has an `unresolved reference'. And the compiler generates an object file (.o file) if there were no syntax errors in the program

3) Link the object file(s)

The next phase is to link the object files to produce an executable. During linking, the static linker (ld) sees the unresolved reference to printf() and searches the available libraries for an implementation for printf(). In general this will be found in the C library (libC on Solaris). Now, the linker has two options:

* It (linker) can take the printf() implementation from the library and copy it into the final executable. The linker then searches the printf() implemenation for other unresolved references, and again consult the libraries for resolution. This process will be performed iteratively until all references to the symbols were resolved. This is known as static linking

* If the C library is realized as a `shared library', the linker can simply put a reference to the C library into the final executable. Still the linker performs symbol resolution checking as above, to determine if the reference to the printf() function necessiates further references to other (shared or nonshared) libraries. This is known as dynamic linking

4) Run the executable

What happens when you run the executable, depends on whether it was linked statically or dynamically:

* A statically linked executable is self contained. It is loaded into memory. The entry point, whose designation is system dependent (for eg, the `__main' symbol) is found and called. This entry function, usually provided by the compiler or a library, performs some setup and initialization and then calls the user-defined main() function and the instructions inside main() function gets executed

* In a dynamically linked executable, after loading the executable binary into memory, the dynamic linker (ld.so.1) takes control first. It reads the library references to dynamic libraries produced by the static linker, and loads them into memory. It then performs symbol resolution again and updates all references to symbols in the shared library to point to their actual location, which can only be determined at runtime, because the shared libraries might be loaded to different memory locations each time the executable binary gets executed

The dynamic linker also has the option to abort the execution if the dynamic linking fails - for example if the shared library has been modified, and a reference known to the static linker isn't available any more



Comments:
Hi ,

All thing is fine .. but how we become sure whether object has been created or memory has been assigned to the object....there might be some lines of code inside constructor ...

Regards
Vaibhav
 
very simple and effective explnaation.
Thanxx!!!
 
Pretty effective piece of writing, much thanks for your article.
 
It was really precise. Thanks a trillion!!
 
Post a Comment

Links to this post:

Create a Link



<< Home


2004-2017 

This page is powered by Blogger. Isn't yours?