Como Compilar Un Programa En C.c++.gcc.g++.java
Enviado por elduro445 • 19 de Junio de 2013 • 1.697 Palabras (7 Páginas) • 699 Visitas
El compilador GCC
Sintaxis.
Ejemplos.
Sufijos en nombres de archivo.
Opciones.
Etapas de compilación.
1. Preprocesado.
2. Compilación.
3. Ensamblado.
4. Enlazado.
Todo en un solo paso
Enlace dinámico y estático.
Resumen.
Información adicional.
GCC es un compilador integrado del proyecto GNU para C, C++, Objective C y Fortran; es capaz de recibir un programa fuente en cualquiera de estos lenguajes y generar un programa ejecutable binario en el lenguaje de la máquina donde ha de correr.
La sigla GCC significa "GNU Compiler Collection". Originalmente significaba "GNU C Compiler"; todavía se usa GCC para designar una compilación en C. G++ refiere a una compilación en C++.
Sintaxis.
gcc [ opción | archivo ] ...
g++ [ opción | archivo ] ...
Las opciones van precedidas de un guión, como es habitual en UNIX, pero las opciones en sí pueden tener varias letras; no pueden agruparse varias opciones tras un mismo guión. Algunas opciones requieren después un nombre de archivo o directorio, otras no. Finalmente, pueden darse varios nombres de archivo a incluir en el proceso de compilación.
Ejemplos.
gcc hola.c
compila el programa en C hola.c, gener un archivo ejecutable a.out.
gcc -o hola hola.c
compila el programa en C hola.c, gener un archivo ejecutable hola.
g++ -o hola hola.cpp
compila el programa en C++ hola.c, gener un archivo ejecutable hola.
gcc -c hola.c
no genera el ejecutable, sino el código objeto, en el archivo hola.o. Si no s indica un nombre para el archivo objeto, usa el nombre del archivo en C y le cambia la extensión por .o.
gcc -c -o objeto.o hola.c
genera el código objeto indicando el nombre de archivo.
g++ -c hola.cpp
igual para un programa en C++.
g++ -o ~/bin/hola hola.cpp
genera el ejecutable hola en el subdirectorio bin del directorio propio del usuario.
g++ -L/lib -L/usr/lib hola.cpp
indica dos directorios donde han de buscarse bibliotecas. La opción -L debe repetirse para cada directorio de búsqueda de bibliotecas.
g++ -I/usr/include hola.cpp
indica un directorio para buscar archivos de encabezado (de extensión .h).
Sufijos en nombres de archivo.
Son habituales las siguientes extensiones o sufijos de los nombres de archivo:
.c fuente en C
.C .cc .cpp .c++ .cp .cxx fuente en C++; se recomienda .cpp
.m fuente en Objective-C
.i C preprocesado
.ii C++ preprocesdo
.s fuente en lenguaje ensamblador
.o código objeto
.h archivo para preprocesador (encabezados), no suele figurar en la linea de comando de gcc
Opciones.
- c
realiza preprocesamiento y compilación, obteniento el archivo en código objeto; no realiza el enlazado.
- E
realiza solamente el preprocesamiento, enviando el resultado a la salida estándar.
-o archivo
indica el nombre del archivo de salida, cualesquiera sean las etapas cumplidas.
-Iruta
especifica la ruta hacia el directorio donde se encuentran los archivos marcados para incluir en el programa fuente. No lleva espacio entre la I y la ruta, así: -I/usr/include
-L
especifica la ruta hacia el directorio donde se encuentran los archivos de biblioteca con el código objeto de las funciones referenciadas en el programa fuente. No lleva espacio entre la L y la ruta, así: -L/usr/lib
-Wall
muestra todos los mensajes de error y advertencia del compilador, incluso algunos cuestionables pero en definitiva fáciles de evitar escribiendo el código con cuidado.
-g
incluye en el ejecutable generado la información necesaria para poder rastrear los errores usando un depurador, tal como GDB (GNU Debugger).
-v
muestra los comandos ejecutados en cada etapa de compilación y la versión del compilador. Es un informe muy detallado.
Etapas de compilación.
El proceso de compilación involucra cuatro etapas sucesivas: preprocesamiento, compilación, ensamblado y enlazado. Para pasar de un programa fuente escrito por un humano a un archivo ejecutable es necesario realizar estas cuatro etapas en forma sucesiva. Los comandos gcc y g++ son capaces de realizar todo el proceso de una sola vez.
1. Preprocesado.
En esta etapa se interpretan las directivas al preprocesador. Entre otras cosas, las variables inicializadas con #define son sustituídas en el código por su valor en todos los lugares donde aparece su nombre.
Usaremos como ejemplo este sencillo programa de prueba, circulo.c:
/* Circulo.c: calcula el área de un círculo.
Ejemplo para mostrar etapas de compilación.
*/
#define PI 3.1416
main()
{
float area, radio;
radio = 10;
area = PI * (radio * radio);
printf("Circulo.\n");
printf("%s%f\n\n", "Area de circulo radio 10: ", area);
}
El preprocesado puede pedirse con cualquiera de los siguientes comandos; cpp alude específicamente al preprocesador.
$ gcc -E circulo.c > circulo.pp
$ cpp circulo.c > circulo.pp
Examinando circulo.pp
$ more circulo.pp
puede verse que la variable PI ha sido sustituída por su valor, 3.1416, tal como había sido fijado en la sentencia #define.
2. Compilación.
La compilación transforma el código C en el lenguaje ensamblador propio del procesador de nuestra máquina.
$ gcc -S circulo.c
realiza las dos primeras etapas creando el archivo circulo.s; examinándolo con
$ more
...