howtoComp

Páginas: 6 (1310 palabras) Publicado: 22 de julio de 2015
C´omo compilar programas en C y Assembler
Organizaci´on del Computador II
Departamento de Computaci´on
Facultad de Ciencias Exactas y Naturales
Universidad de Buenos Aires
Segundo cuatrimestre - 2006

1.

Desde los fuentes al ejecutable

Un archivo ejecutable o “un binario” est´a compuesto por numerosas partes y es el resultado
de uno o varios archivos fuente. Los archivos fuente pueden ser dediversos tipos, lenguajes,
etc. Por ello, es fundamental conocer c´omo se compila, ensambla y linkea1 un ejecutable, m´as

un, cuando hay que realizar esa labor manualmente.

Figura 1: Diagrama del proceso de compilaci´on y ensamblaje
B´asicamente, la tarea se divide en dos partes, aunque a veces no lo notemos. La primer
parte es la obtenci´on un archivo objeto, a partir de un archivo fuente, lacual se denomina
compilaci´
on 2 o ensamblaje 3 , seg´
un el caso. La segunda parte consiste en la combinaci´on de
todos los archivos objeto en un archivo ejecutable, la cual se denomina linkeo. Adem´as, en esa
combinaci´on, se define el punto de entrada del programa, que ser´a la primer instrucci´on que
se ejecutar´a del programa final.
1

“linkear ” es la castellanizaci´
on del verbo en ingl´esto link, la cual usaremos vulgarmente como si fuera
adecuado.
2
compilar. Preparar un programa en el lenguaje m´aquina a partir de otro programa de ordenador escrito en
otro lenguaje.
3
ensamblar. Preparar un programa en lenguaje m´aquina a partir de un programa en lenguaje simb´olico.

1

Organizaci´on del Computador II

2.

P´agina 2 de 3

Compilando con gcc

Para compilar un archivo escrito enlenguaje C y obtener el archivo objeto utilizaremos el
gcc de la siguiente manera:
gcc -c -o principal.o principal.c
donde principal.c4 es nuestro c´odigo fuente en lenguaje C, principal.o es el archivo objeto
de destino y -c indica que estamos compilando. En general, el comando -o nombre indica que
el archivo de destino es nombre .
Si nuestro programa est´a compuesto de m´as de un archivo enlenguaje C, deberemos ejecutar
una llamada gcc por cada archivo y obtener as´ı un objeto para cada uno de ellos.

3.

Ensamblando con nasm
Para ensamblar un archivo en assembler con nasm debemos ejecutar la siguiente instrucci´on:

nasm -felf rapidas.asm
donde rapidas.asm es nuestro archivo assembler en cuesti´on y la opci´on -felf indica que el
formato del archivo objeto ser´a ELF (el m´as com´
unpara Linux). Aqu´ı tambi´en se podr´ıa haber
utilizado la opci´on -o rapidas.o pero nasm por omisi´on utiliza ese archivo como destino.
Nuevamente, si tuvi´eramos varios archivos en lenguaje ensamblador que utilizan funciones
entre ellos, debemos ensamblarlos por separado y obtener as´ı un archivo objeto para cada.

4.

Linkeando todo para obtener el ejecutable

Existen varios linkers pero aqu´ımostraremos dos de ellos: el ld y el propio gcc. El linker
toma todos los archivos objeto y los combina para formar el ejecutable. Como cada archivo
objeto fue compilado por separado, podr´ıa haber llamadas a funciones que no est´an en el propio
archivo objeto. Por ejemplo, si nuestro principal.c tiene una llamada a una funci´on que fue
programada en lenguaje ensamblador porque necesitaba serr´apida, la cual est´a definida en
rapidas.asm, el gcc compila el c´odigo que est´a en principal.c y anota en alguna parte del
archivo objeto que necesita una funci´on con un determinado nombre. Ser´a tarea del linker
encontrar en qu´e archivo objeto fue definida una funci´on con ese nombre y efectivamente
enlazar esa llamada con la funci´on correcta.
De igual modo, en el archivo en lenguaje ensambladorpuede haber llamadas a funciones
ajenas a ese archivo, las cuales pueden estar en lenguaje ensablador en otros archivos o bien
en lenguaje C.
En un archivo en lenguaje C, para indicar que la funci´on no est´a en el archivo actual
simplemente se debe incluir el prototipo de la funci´on, pero no el cuerpo. De este modo, el gcc
sabr´a qu´e par´ametros tiene esa funci´on y sabr´a adem´as que estar´a...
Leer documento completo

Regístrate para leer el documento completo.

Conviértase en miembro formal de Buenas Tareas

INSCRÍBETE - ES GRATIS