i am ok with the concepts of c language but i would like to know
more about the internals of c with respect to the compilers
what happens when we say
gcc filename.c
the a.out will get created(what actaully compiler does to the code inaddition to generating object code)
gcc -c filename.c ( )
creates only .o files we need to link them to get a.out(i need extra)
gcc -o fn filename.c ( )
request you to provide me the more info on following
symbol table( how the linker actually uses this info),virtual address(what is this why its needed), physical address(what is this why its needed),linker,loading,locating.
expecting the above with repect to the gcc compilers
thanks in advance
either links or some descrption i am expecting
Everything you asked is outside the work the compiler does.
The compiler's main objective is to take (preprocessed) high-level code, and translate it to assembly code. Example:
The assembler then uses that to create an object file (the output of 'gcc -c').
The linker takes the object file and connects it with various libraries to create an executable.
The loader reads the executable, and loads the referenced libraries, if available, and maps them into virtual memory.
The 'gcc' command, by default, hides these steps from the user, and invokes the complete toolchain (for a C program: cpp [C Pre-Processor], cc [C Compiler], as [Assembler], and ld [Linker])
---------- Post updated at 11:37 ---------- Previous update was at 11:18 ----------
Addendum: if you compile the program above (hello.c) using
you'll see all the "compilation" steps, and the intermediate steps will be saved to hello.i (preprocessed), hello.s (compiled), hello.o (assembled), and hello (linked).
for your understanding at a higher, non-programmer level -
The above statement does this
1. preprocesses - meaning it invokes a program to honor the #include directives, #define directives in myfile.c. The name of the program that does this is usually cpp.
2. compile - transform the preprocessed code into assembly language - see pludi's
nice description above
3. link edit - this is done by the ld program. The -lm brings in a library (precompiled shared library of code) called libm. The ld program looks for all of the external symbols in your code (like printf() ) and find the external symbol in a library. Each external function you call has to be tracked down then evaluated by ld. It also finds external variables for you. It packs all of this into a specially formatted file - in "a.out" format or ELF format - or whatever file format your machine uses. There are others.
The final product is compiled or binary code, which can be run directly by the operating system.
The stement aboves means "compile myfile.c, write it out to a binary file called myfile and link against libm". BTW, ld by default, also links against the standard C library, libc, so you do not have to "ask" for it.
I have a SPARC server with Solaris SPARC 10 OS installed
I am trying to compile source code from VLC media player and PHP 7 tarballs
However the stumbling block I encounter is that when I type in ./configure into my PUTTY terminal the GCC compiler tells me halfway through configuration that... (3 Replies)
I have g++-4.6 and g++-4.8.2 installed on my system and want to build a suite of programs using each one.
I am thinking putting the option on what to build by having a different target, one for g++-4.6 and another target for g++-4.8.2.
What do you think? (1 Reply)
Hello,
Long-time Unix hacker here - I've worked on four variants of the kernel prior to the introduction of Linux. In my spare time, I've written Linux (Ubuntu) device drivers, kernel modules, cross-compiled, and built the kernel.
I'd like to do Linux internals/device drivers as a day job,... (1 Reply)
Hello
I have a questions and m stuck on it.
Theoritcally the phases of compiler.
1. Lexical analyis -- genrates tokes
NOW MY QUESTION IS: where i can see these token if i make a simple C program.
Please guys tell me step to see it. and other phases too.
your help will be appreciated... (1 Reply)
i have windows 7 64bit, and i want to program C in it, i have the eclipse for C, but it wont work because i have no C compilers , where do i get a C compiler, so eclipse will work?
I usually transfer to a unix server and use a command
gcc -Wall -g -o ___ ___
where can i get the gcc C... (5 Replies)
Hi,
While trying to configure Apache Web Server on P630 Server i am getting the below message
"Creating Makefile in src
+ configured for AIX 5.2 platform
Error: could not find any of these C compilers
anywhere in your PATH: gcc cc acc c89
Configure terminated"
when i did a "lslpp -l... (2 Replies)