Red Hat Linux 7 Unleashed

Red Hat Linux 7 Unleashed

By William Ball

GNU C/C++ Compiler Command-Line Switches

If you loaded the development tools when you installed Linux (or later using RPM), you should have the GNU C/C++ compiler (gcc). Many different options are available for the GNU C/C++ compiler, and many of them match the C and C++ compilers available on other UNIX systems. Table 24.1 shows the important switches. Look at the man page or info file for gcc for a full list of options and descriptions.

Table 24.1. GNU C/C++ Compiler Switches

Switch Description
-x language Specifies the language (C, C++, Java, and assembler are valid values).
-c Compiles and assembles only (does not link).
-S Compiles (does not assemble or link); generates an assembler code (.s) file.
-E Preprocesses only (does not compile, assemble, or link).
-o file Specifies the output filename (a.out is the default).
-l library Specifies the libraries to use.
-I directory Searches the specified directory for include files.
-w Inhibits warning messages.
-pedantic Strict ANSI compliance required.
-Wall Prints additional warning messages.
-g Produces debugging information (for use with gdb).
-ggdb Generates native-format debugging info (and gdb extensions).
-p Produces information required by gprof.
-pg Produces information for use by gprof.
-O Optimizes.

The compilation process takes place in several steps:

  1. First, the C preprocessor parses the file. To do so, it sequentially reads the lines, includes header files, and performs macro replacement.
  2. The compiler parses the modified code for correct syntax. This builds a symbol table and creates an intermediate object format. Most symbols have specific memory addresses assigned, although symbols defined in other modules, such as external variables, do not.
  3. The last compilation stage, linking, ties together different files and libraries and then links the files by resolving the symbols that had not previously been resolved.

Share ThisShare This

Informit Network