An Introduction to GCC
for the GNU Compilers gcc and g++
Brian Gough
Foreword by Richard M. Stallman
A catalogue record for this book is available from the British Library.
First printing, March 2004 (7/3/2004).
Published by Network Theory Limited.
15 Royal Park
Bristol
BS8 3AL
United Kingdom
Email: info@network-theory.co.uk
ISBN 0-9541617-9-3
Further information about this book is available from
http://www.network-theory.co.uk/gcc/intro/
Cover Image: From a layout of a fast, energy-efficient hardware stack.
(1)
Image created with the free Electric VLSI design system by Steven Rubin
of Static Free Software (www.staticfreesoft.com). Static Free Software
provides support for Electric to the electronics design industry.
Copyright
c
° 2004 Network Theory Ltd.
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.2
or any later version published by the Free Software Foundation; with no
Invariant Sections, with the Front-Cover Texts being “A Network Theory
Manual”, and with the Back-Cover Texts as in (a) below. A copy of
the license is included in the section entitled “GNU Free Documentation
License”.
(a) The Back-Cover Text is: “The development of this manual was funded
entirely by Network Theory Ltd. Copies published by Network Theory
Ltd raise money for more free documentation.”
The Texinfo source for this manual may be obtained from:
http://www.network-theory.co.uk/gcc/intro/src/
(1)
“A Fast and Energy-Efficient Stack” by J. Ebergen, D. Finchelstein, R. Kao,
J. Lexau and R. Hopkins.
i
Table of Contents
Foreword . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.1 A brief history of GCC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.2 Major features of GCC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.3 Programming in C and C++ . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.4 Conventions used in this manual. . . . . . . . . . . . . . . . . . . . . . . 5
2 Compiling a C program . . . . . . . . . . . . . . 7
2.1 Compiling a simple C program . . . . . . . . . . . . . . . . . . . . . . . . 7
2.2 Finding errors in a simple program . . . . . . . . . . . . . . . . . . . . 8
2.3 Compiling multiple source files . . . . . . . . . . . . . . . . . . . . . . . . 9
2.4 Compiling files independently . . . . . . . . . . . . . . . . . . . . . . . . 10
2.4.1 Creating object files from source files . . . . . . . . 11
2.4.2 Creating executables from object files. . . . . . . . 11
2.4.3 Link order of object files. . . . . . . . . . . . . . . . . . . . 12
2.5 Recompiling and relinking . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.6 Linking with external libraries . . . . . . . . . . . . . . . . . . . . . . . 14
2.6.1 Link order of libraries . . . . . . . . . . . . . . . . . . . . . . 15
2.7 Using library header files . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
3 Compilation options. . . . . . . . . . . . . . . . . 19
3.1 Setting search paths . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
3.1.1 Search path example . . . . . . . . . . . . . . . . . . . . . . . 20
3.1.2 Environment variables. . . . . . . . . . . . . . . . . . . . . . 21
3.1.3 Extended search paths . . . . . . . . . . . . . . . . . . . . . 22
3.2 Shared libraries and static libraries . . . . . . . . . . . . . . . . . . . 23
3.3 C language standards. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
3.3.1 ANSI/ISO. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
3.3.2 Strict ANSI/ISO . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
3.3.3 Selecting specific standards . . . . . . . . . . . . . . . . . 28
3.4 Warning options in -Wall. . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
3.5 Additional warning options . . . . . . . . . . . . . . . . . . . . . . . . . . 30
ii An Intro duction to GCC
4 Using the preprocessor . . . . . . . . . . . . . . 35
4.1 Defining macros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
4.2 Macros with values . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
4.3 Preprocessing source files . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
5 Compiling for debugging . . . . . . . . . . . . 41
5.1 Examining core files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
5.2 Displaying a backtrace. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
6 Compiling with optimization. . . . . . . . . 45
6.1 Source-level optimization . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
6.1.1 Common subexpression elimination. . . . . . . . . . 45
6.1.2 Function inlining. . . . . . . . . . . . . . . . . . . . . . . . . . . 46
6.2 Speed-space tradeoffs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
6.2.1 Loop unrolling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
6.3 Scheduling. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
6.4 Optimization levels . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
6.5 Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
6.6 Optimization and debugging . . . . . . . . . . . . . . . . . . . . . . . . . 52
6.7 Optimization and compiler warnings . . . . . . . . . . . . . . . . . . 53
7 Compiling a C++ program . . . . . . . . . . . 55
7.1 Compiling a simple C++ program . . . . . . . . . . . . . . . . . . . . . 55
7.2 Using the C++ standard library. . . . . . . . . . . . . . . . . . . . . . . 56
7.3 Templates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
7.3.1 Using C++ standard library templates . . . . . . . 57
7.3.2 Providing your own templates. . . . . . . . . . . . . . . 58
7.3.3 Explicit template instantiation . . . . . . . . . . . . . . 60
7.3.4 The export keyword . . . . . . . . . . . . . . . . . . . . . . . 61
8 Platform-specific options . . . . . . . . . . . . 63
8.1 Intel and AMD x86 options . . . . . . . . . . . . . . . . . . . . . . . . . . 63
8.2 DEC Alpha options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
8.3 SPARC options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
8.4 POWER/PowerPC options . . . . . . . . . . . . . . . . . . . . . . . . . . 65
8.5 Multi-architecture support . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
9 Troubleshooting. . . . . . . . . . . . . . . . . . . . . 69
9.1 Help for command-line options . . . . . . . . . . . . . . . . . . . . . . . 69
9.2 Version numbers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
9.3 Verbose compilation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
iii
10 Compiler-related tools. . . . . . . . . . . . . . 73
10.1 Creating a library with the GNU archiver . . . . . . . . . . . . 73
10.2 Using the profiler gprof . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
10.3 Coverage testing with gcov . . . . . . . . . . . . . . . . . . . . . . . . . 77
11 How the compiler works . . . . . . . . . . . . 81
11.1 An overview of the compilation proces s . . . . . . . . . . . . . . 81
11.2 The preprocessor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
11.3 The compiler . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
11.4 The assembler . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
11.5 The linker . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
12 Examining compiled files . . . . . . . . . . . 85
12.1 Identifying files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
12.2 Examining the symb ol table . . . . . . . . . . . . . . . . . . . . . . . . 86
12.3 Finding dynamically linked libraries . . . . . . . . . . . . . . . . . 86
13 Getting help . . . . . . . . . . . . . . . . . . . . . . . 89
Further reading . . . . . . . . . . . . . . . . . . . . . . . . 91
Acknowledgements . . . . . . . . . . . . . . . . . . . . . 93
Other books from the publisher . . . . . . . . . 95
Free software organizations . . . . . . . . . . . . . 97
GNU Free Documentation License . . . . . . 99
ADDENDUM: How to use this License for your
documents. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
Index. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105