GNU Compiler Collection (GCC)
The GNU Compiler Collection (GCC) is a vital compiler system developed by the GNU Project. It supports a wide range of programming languages, including C, C++, Objective-C, Fortran, Ada, Go, and D. This documentation provides an overview of its features, usage, and common commands for developers working with these languages.
Key Features
- Extensive Language Support: Compiles numerous programming languages efficiently.
- Platform Independence: Runs on and generates code for a vast array of hardware architectures and operating systems.
- Optimization Capabilities: Offers sophisticated optimization techniques to improve code performance.
- Debugging Support: Integrates well with debuggers like GDB.
- Standards Compliance: Adheres to various language standards (e.g., ISO C++, ISO C).
Basic Usage
The fundamental command to compile a C source file (e.g., hello.c
) into an executable is:
gcc hello.c -o hello
This command takes the source file hello.c
and creates an executable file named hello
. The -o
flag specifies the output filename.
Common GCC Flags
GCC provides a rich set of flags to control the compilation process. Here are some frequently used ones:
Compilation Stages
-E
: Preprocess only. Stops after the preprocessing stage.-S
: Compile only. Stops after the assembly stage.-c
: Compile and assemble. Stops after the assembly stage.
Optimization Levels
-O0
: No optimization (default).-O1
: Enable basic optimizations.-O2
: Enable more optimizations.-O3
: Enable aggressive optimizations.-Os
: Optimize for size.-Ofast
: Enable all-O3
optimizations plus potentially unsafe floating-point optimizations.
Debugging Information
-g
: Emit debugging information. This is crucial for using debuggers like GDB.-ggdb
: Emit debugging information for GDB.
Warnings
-Wall
: Enable most warning messages.-Wextra
: Enable additional warning messages not covered by-Wall
.-Werror
: Treat all warnings as errors.
Include Paths and Libraries
-I /path/to/include
: Add a directory to the search path for header files.-L /path/to/lib
: Add a directory to the search path for libraries.-l library_name
: Link with a specific library.
Example with Multiple Files and Libraries
Compiling a project with multiple source files (main.c
, utils.c
) and linking against a math library:
gcc main.c utils.c -I ./include -L ./lib -l mylib -o myprogram -O2 -Wall