PDF de programación - Una Introducción a GCC

Imágen de pdf Una Introducción a GCC

Una Introducción a GCCgráfica de visualizaciones

Publicado el 2 de Diciembre del 2018
646 visualizaciones desde el 2 de Diciembre del 2018
674,3 KB
164 paginas
Creado hace 8a (25/01/2013)
Una Introducción a GCC

para los Compiladores de GNU gcc y g++
Revisado y actualizado

Brian Gough
Prefacio por Richard M. Stallman

El registro de este libro está disponible en la Biblioteca Británica.

Segunda impresión, Agosto 2005 (1/8/2005). Revisado y actualizado.
Primera impresión, Marzo 2004 (7/3/2004).
Traducido por David Arroyo Menéndez y Luis Palomo de Onís Gutiérrez,
Agosto 2011 (10/8/2011). Revisado y actualizado (gcc 4.6).
Publicado por Network Theory Limited.15 Royal Park
Bristol
BS8 3AL
United Kingdom

Correo electrónico: [email protected]

ISBN 0-9541617-9-3

Hay más información de este libro disponible desde
http://www.network-theory.co.uk/gcc/intro/

Imagen de cubierta: Del diseño de una pila de hardware rápida y
eficiente energéticamente.1 Imagen creada con el sistema de diseño
libre Electric VLSI escrito por Steven Rubin de Static Free Software
(www.staticfreesoft.com). Static Free Software proporciona soporte
para Electric en la industria del diseño electrónico
Copyright c 2004, 2005 Network Theory Ltd.
Se permite la copia, distribución y/o modificación de este docu-
mento bajo los términos de la Licencia de Documentación Libre
de GNU, Versión 1.2 o cualquier versión posterior publicada por la
Free Software Foundation; sin Secciones Invariantes, con el Texto
de Portada diciendo “Un Manual de Network Theory”, y con el
Texto de Contraportada como en (a). Una copia de la licencia está
incluida en la sección titulada “GNU Free Documentation License”.
(a) El Texto de Contraportada es: “El desarrollo de este manual
fué realizado enteramente por Network Theory Ltd. Las copias
publicadas por Network Theory Ltd traerán dinero para más doc-
umentación libre.”
Las fuentes en Texinfo para este manual pueden ser obtenidas de
http://www.network-theory.co.uk/gcc/intro/src/

1 “A Fast and Energy-Efficient Stack” por J. Ebergen, D. Finchelstein, R.

Kao, J. Lexau y R. Hopkins.

Índice General

i

Una Introducción a GCC . . . . . . . . . . . . . . . . . . . 1

Prefacio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3

1 Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.1 Una breve historia de GCC . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.2
Importantes características de GCC. . . . . . . . . . . . . . . . . . . . 6
1.3 Programación en C y C++ . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.4 Convenciones usadas en este manual . . . . . . . . . . . . . . . . . . . 7

2 Compilando un programa C . . . . . . . . . . . . 9
2.1 Compilando un pequeño programa C . . . . . . . . . . . . . . . . . . 9
2.2 Encontrando errores en un pequeño programa. . . . . . . . . 10
2.3 Compilando múltiples archivos fuentes . . . . . . . . . . . . . . . . 11
2.4 Compilando archivos independientes . . . . . . . . . . . . . . . . . . 13
2.4.1 Creando archivos objeto desde archivos fuente . . . 13
2.4.2 Creando ejecutables desde archivos objeto . . . . . . . 14
2.5 Recompilando y reenlazando. . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.6 Un pequeño makefile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
2.7 Enlazando con librerías externas . . . . . . . . . . . . . . . . . . . . . . 18
2.7.1 Orden de enlace de librerías . . . . . . . . . . . . . . . . . . . . . 20
2.8 Usando librerías de archivos de cabeceras . . . . . . . . . . . . . 21

3 Opciones de compilación . . . . . . . . . . . . . . . 23
3.1 Asignando rutas de búsqueda . . . . . . . . . . . . . . . . . . . . . . . . . 23
3.1.1 Ejemplo de ruta de búsqueda . . . . . . . . . . . . . . . . . . . . 24
3.1.2 Variables de entorno . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
3.1.3 Rutas de búsqueda extendidas . . . . . . . . . . . . . . . . . . . 27
3.2 Librerías compartidas y librerías estáticas . . . . . . . . . . . . . 28
3.3 Estándares del lenguaje C . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
3.3.1 ANSI/ISO. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
3.3.2 ANSI/ISO estricto. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
3.3.3 Seleccionando estándares específicos . . . . . . . . . . . . . 34
3.4 Opciones de aviso en -Wall. . . . . . . . . . . . . . . . . . . . . . . . . . . 35
3.5 Opciones de aviso adicionales . . . . . . . . . . . . . . . . . . . . . . . . . 37
3.6 Opciones de aviso recomendadas . . . . . . . . . . . . . . . . . . . . . . 41

ii

Una Introducción a GCC

4 Usando el preprocesador . . . . . . . . . . . . . . . 43
4.1 Definiendo macros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
4.2 Macros con valor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
4.3 Preprocesando archivos fuentes . . . . . . . . . . . . . . . . . . . . . . . 46

5 Compilando para depuración . . . . . . . . . . 49
5.1 Examinando archivos core . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
5.2 Mostrando un rastreo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
5.3 Poniendo un punto de ruptura . . . . . . . . . . . . . . . . . . . . . . . . 53
5.4 Paso a paso a través de un programa . . . . . . . . . . . . . . . . . 53
5.5 Modificando variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
5.6 Continuando la ejecución . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
5.7 Más información . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55

6 Compilando con optimización . . . . . . . . . 57
6.1 Optimización a nivel de fuentes . . . . . . . . . . . . . . . . . . . . . . . 57
6.1.1 Eliminación de subexpresión común . . . . . . . . . . . . . . 57
6.1.2 Expansión de función en línea . . . . . . . . . . . . . . . . . . . 58
6.2 Dilema velocidad-espacio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
6.2.1 Desenrollado de bucle . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
6.3 Planificación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
6.4 Niveles de optimización. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
6.5 Ejemplos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
6.6 Optimización y depuración . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
6.7 Optimización y avisos del compilador . . . . . . . . . . . . . . . . . 66

7 Compilando un programa C++ . . . . . . . 69
7.1 Compilando un pequeño programa C++ . . . . . . . . . . . . . . 69
7.2 Opciones de compilación en C++. . . . . . . . . . . . . . . . . . . . . 71
7.3 Usando la librería estándar de C++ . . . . . . . . . . . . . . . . . . 72
7.4 Plantillas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
7.4.1 Usando plantillas de librerías estándar de C++ . . 73
7.4.2 Proporcionando sus propias plantillas . . . . . . . . . . . . 74
7.4.3
Instanciación explícita de plantillas . . . . . . . . . . . . . . 76
7.4.4 La palabra reservada export . . . . . . . . . . . . . . . . . . . . 77

iii

8 Opciones específicas de plataforma . . . . 79
8.1 Opciones para Intel y AMD x86 . . . . . . . . . . . . . . . . . . . . . . 79
8.1.1 Extensiones x86 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
8.1.2 Procesadores x86 de 64 bits . . . . . . . . . . . . . . . . . . . . . . 81
8.2 Opciones para DEC Alpha . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
8.3 Opciones para SPARC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
8.4 Opciones para POWER/PowerPC . . . . . . . . . . . . . . . . . . . . 83
8.5 Soporte de múltiples arquitecturas . . . . . . . . . . . . . . . . . . . . 84
8.6 Usos de coma flotante . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
8.7 Portabilidad de los tipos con signo y sin signo . . . . . . . . 87

9 Resolución de problemas . . . . . . . . . . . . . . . 91
9.1 Opciones de ayuda en línea de comandos . . . . . . . . . . . . . 91
9.2 Números de versión . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
9.3 Compilación verbosa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
9.4 Parando un programa en un bucle infinito . . . . . . . . . . . . 95
9.5 Previniendo un uso excesivo de memoria . . . . . . . . . . . . . . 97

10 Utilidades relativas al compilador . . . . 99
10.1 Creando una librería con el archivador de GNU . . . . . . 99
10.2 Usando el profiler gprof . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
10.3 Test de cobertura con gcov. . . . . . . . . . . . . . . . . . . . . . . . . 104

11 Como funciona el compilador . . . . . . . 107
11.1 Una vista de los procesos de compilación . . . . . . . . . . . 107
11.2 El preprocesador . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108
11.3 El compilador . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108
11.4 El ensamblador . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
11.5 El enlazador . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109

12 Examinado archivos compilados . . . . 111
12.1
Identificando archivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
12.2 Examinando la tabla de símbolos . . . . . . . . . . . . . . . . . . . 112
12.3 Encontrando librerías dinámicas enlazadas . . . . . . . . . . 113

13 Mensajes comunes de error . . . . . . . . . 115
13.1 Mensajes de error del preprocesador . . . . . . . . . . . . . . . . 115
13.2 Mensajes de error del compilador . . . . . . . . . . . . . . . . . . . 116
13.3 Mensajes de error del enlazador . . . . . . . . . . . . . . . . . . . . 125
13.4 Mensajes de error en tiempo de ejecución . . . . . . . . . . . 127

iv

Una Introducción a GCC

14 Obteniendo ayuda . . . . . . . . . . . . . . . .
  • Links de descarga
http://lwp-l.com/pdf14383

Comentarios de: Una Introducción a GCC (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad