Mostrando entradas con la etiqueta compilar. Mostrar todas las entradas
Mostrando entradas con la etiqueta compilar. Mostrar todas las entradas

domingo, 6 de junio de 2010

Descargar MinGW con gcc 4.5 automáticamente

Este post se podría llamar:
¿Cómo instalar MinGW?
¿Cómo instalar y usar gcc 4.5 en Windows?
¿Cómo compilar programas de C o C++ en Windows?
O también, ¿puedo portar MinGW en un pendrive?
Cualquiera de los casos se responde con el siguiente archivo: MinGW-Downloader-0.2.zip.

Los pasos a seguir son los siguientes:
  1. Cree una carpeta donde descomprimir MinGW-Downloader-0.2.zip (por ejemplo, C:\Compilers, o C:\GNU, lo importante es que la carpeta no tenga espacios!)
  2. Descomprima MinGW-Downloader-0.2.zip en esa carpeta
  3. Ejecute el archivo "C:\Compilers\MinGW-Downloader\MinGW-4.5-Downloader.bat"
  4. Espere...
  5. Una vez finalizado deberá ver algunos mensajes en la pantalla diciéndole si tuvo éxito (SUCCESS), inclusive el script intenta compilar un programa en C y otro en C++.
  6. Listo, ya tiene MinGW con gcc 4.5 disponible en su máquina.
Puede usar el script "Run-cmd-with-MinGW-4.5.bat" para ejecutar la línea de comandos de Windows y tener el compilador disponible (gcc, g++, etc.) en la variable PATH. Lo importante es que el proceso de descarga no modifica ninguna variable de entorno suya (PATH), por lo tanto, podría borrar la carpeta "C:\Compilers" y empezar desde cero siempre que así lo desee.

Puede mover la carpeta "C:\Compilers\MinGW-Downloader\MinGW-4.5" a "C:\MinGW-4.5" y borrar "C:\Compilers\MinGW-Downloader" completamente. Si quiere tener el compilador disponible desde cualquier aplicación (por ejemplo, desde un editor de texto o IDE), podría agregar la ruta "C:\MinGW-4.5\bin" a su PATH.

Cabe destacar que la carpeta "MinGW-4.5" ("C:\Compilers\MinGW-Downloader\MinGW-4.5") y el archivo "Run-cmd-with-MinGW-4.5.bat" los puede mover donde usted desee (por ejemplo, llevarlos en un pen drive), sólo tenga en cuenta que para hacer esto los dos tienen que estar en el mismo directorio (e.j. "C:\MinGW-4.5" y "C:\Run-cmd-with-MinGW-4.5.bat").

sábado, 10 de mayo de 2008

Compilando archivos

Suponiendo que conoce qué es un archivo de código fuente, código objeto, un ejecutable .exe, y el código máquina; voy a pasar a explicar algunos comandos del GCC para compilar.

Retomando la idea del anterior post, imagínese que creamos un archivo timemark.h para darle un poco de portabilidad a todo este asunto de medir el desempeño de una rutina. Las declaraciones de timemark.h pueden ser usadas para crear un pequeño programa ejemplo1.c que sea independiente de la plataforma (por lo menos entre Windows y GNU/Linux).

Vamos a probar algunas operaciones sobre la línea de comandos para ver cómo compilar este archivo. Inicialmente, la opción más sencilla es utilizar directamente "gcc ejemplo1.c", esto nos da como resultado el archivo "a.exe" o "a.out". Veamos (teniendo timemark.h y ejemplo1.c en un directorio C:\ejemplo1):
C:\ejemplo1>gcc ejemplo1.c
C:/Temp/ccMjdaaa.o:ejemplo1.c:(.text+0x31): undefined reference to `get_timemark'
C:/Temp/ccMjdaaa.o:ejemplo1.c:(.text+0x3c): undefined reference to `get_timemark'
C:/Temp/ccMjdaaa.o:ejemplo1.c:(.text+0x4e): undefined reference to `timemark_diff'
collect2: ld returned 1 exit status
Como podrá ver, recibimos un error por las funciones no definidas get_timermark y timemark_diff. Esto se debe a que utilizando solamente "gcc ejemplo1.c", se intenta enlazar el código de ese único archivo en el ejecutable. Tenemos algunas opciones intermedias antes de crear el .exe final. Por ejemplo, podemos crear un archivo que contenga el código objeto ya compilado (pero únicamente del archivo en cuestión ejemplo1.c):
C:\ejemplo1>gcc -o ejemplo1.o -c ejemplo1.c
Así obtenemos el ejemplo1.o (código objeto). En este caso no recibimos errores ya que ejemplo1.o hace referencias a las funciones get_timermark y timemark_diff, pero no necesita su implementación específica. Cuando creamos el ejecutable final (.exe) es cuando realmente necesitamos el código de todas las funciones invocadas.

El archivo que falta es timemark.c. Del mismo modo, podemos compilarlo con el comando:
C:\ejemplo1>gcc -o timemark.o -c timemark.c
Ahora resta unir ambos archivos objetos en un único ejecutable, con un único punto de acceso (main):
C:\ejemplo1>gcc -o ejemplo.exe ejemplo1.o timemark.o
Y listo. Por ahora, lo aprendido son estos dos comandos:
gcc -o archivo.o -c archivo.c
gcc -o archivo.exe archivo1.o archivo2.o archivo3.o ...
El primero compila el código fuente para generar un archivo objeto, y el segundo comando reune (enlaza, linkea) el grupo de archivos objetos en un ejecutable único.

De todas formas, es bastante tedioso escribir estos comandos cada vez que queremos compilar. Para resolver el problema podemos utilizar los llamados Makefiles. Claro, lo más interesante queda para un futuro post.