Escrito por Iván Alonso el Jueves 10 de Julio de 2008

Hace unos días instalamos Eclipse en Ubuntu, para ir trasteando con el nuevo entorno. Conste en acta que yo Eclipse lo he usado tres veces contadas, así que iremos descubriendo qué podemos hacer y cómo a la vez.

Los siguientes pasos serán instalar el mismo entorno sobre Windows (de lo que trata este post) y, por último, de configurarlo de modo que podamos compilar el mismo código en dos entornos diferentes generando ejecutables autónomos (que quedará para un próximo post).

Instalando Eclipse sobre Windows

Vamos a la página de descargas de Eclipse (veremos que ya se encuentra en su versión Ganymede), seleccionamos Eclipse IDE for C/C++ Developers [68MB], y escogeremos el mirror desde el que queremos descargar la versión (por defecto se nos mostrará uno cercano).

Tras descargar el archivo .zip, lo descomprimiremos y dejaremos la carpeta resultante (con el original nombre de eclipse) en c:\Archivos de Programa\ (o en cualquier otro sitio si no tenemos los permisos necesarios, ya que el contenido de la carpeta es completamente autónomo). Colocar un acceso directo a eclipse\eclipse.exe en algún lugar útil (por ejemplo en el escritorio) no estaría de más [botón derecho sobre el archivo, Enviar a, Escritorio].

Probamos a arrancar, a ver qué pasa

En el primer inicio nos pide que le indiquemos un workspace, que será la carpeta donde trabaje con los distintos proyectos. c:\Documents & Settings\tunombre\workspace\ por ejemplo. O una carpeta Proyectos en el escritorio, o donde vosotros queráis. Cuestión de gustos. Marca la opción de que lo use como default y así no lo preguntará en cada inicio del entorno.

La primera pantalla es horrenda como ella sola, y únicamente tiene unos iconos que nos llevan a distintos tipos de tutoriales y ejemplos, y otro a la derecha de ‘Go to the Workbench‘ en el que haremos click para ir al entorno en sí.

File, New, C++ Project. Escojemos un nombre para el proyecto [Test01] y en Project Types seleccionamos MakeFile Project, Hello World C++ Project (el mismo tipo de proyecto de prueba que utilizamos cuando instalamos sobre Ubuntu). Finish.

Nada más crear el proyecto ya tenemos un warning en la ventana de problemas… empezamos mal. Da un error al lanzar aplicaciones externas. ¿Por qué? Porque Eclipse aquí es únicamente el IDE, que puede trabajar con distintos compiladores y herramientas pero no incluye ninguna. Como necesitamos el compilador de c++ (gcc), lo instalaremos. Este es el paso que mucha gente no comprende, y suele dejar de usar unos IDE u otros porque no es capaz (por vagancia o por desconocimiento) de integrar las distintas herramientas que necesitaremos, echándole la culpa de que algo no funcione al IDE.

¿gcc para Windows?

Paso 1: Instalar el entorno Cygwin para tener disponible el compilador gcc, así como otras herramientas que puedan hacernos falta (make por ejemplo). Hay un post de hace poco en esta misma página que explica cómo (ahora todo encaja como un gran puzzle sideral ¿verdad?).

Paso 2: Hacer que los comandos que lanzan estas aplicaciones estén disponibles desde cualquier parte del sistema (añadirlos al PATH de Windows). Botón derecho sobre el icono Mi Pc, Propiedades. Pestaña Opciones Avanzadas, botón Variables de Entorno. En el recuadro de Variables del Sistema, bajamos hasta encontrar Path. La seleccionamos y pulsamos Modificar. Al final de la línea con múltiples carpetas, añadiremos un punto y coma (para separar de la siguiente que vamos a introducir) y la ruta a la carpeta bin de Cygwin. En el caso de nuestro ejemplo era C:\Archivos de programa\cygwin\bin, dado que fue allí donde lo instalamos. Aceptar, Aceptar.

¿Qué es lo que estamos haciendo con esto? El Path de Windows define dónde va a buscarse una aplicación cuando no se sabe dónde está. Cuando se intente lanzar gcc (que lo tendremos puesto que lo hemos instalado con Cygwin), Windows comenzará a buscarlo en las carpetas indicadas en esa línea, por orden. Al llegar a la última, la encontrará y la ejecutará.

Volvemos a Eclipse y hacemos un Build del proyecto (el icono con la forma del martillo). El mensaje relativo al gcc habrá desaparecido, pero en la ventana Console podríamos tener el mensaje de error de Cannot run program “make” si en la instalación previa de Cygwin se nos olvidó instalarlo. Lo hacemos con la ayuda del manual que ya hemos visitado un par de veces. Si fuisteis más listos y previsores que yo (cosa poco difícil) ya os habríais acordado en su momento y lo tendríais instalado. Yo, como a veces no me doy cuenta de las cosas, he tenido que hacer esto varias veces, para make, gdb y gcc-g++, así que aprovechad y hacedlo todo de un sólo paso. Si os pasa como a mí, es probable que necesitéis reiniciar Eclipse, aunque no debiera ser necesario.

Ahora que el make funciona, probamos hacer un Run (ejecutar) del programa que acabamos de compilar.

Un posible fallo que podemos tener es que nos diga ‘Launch failed. Binary not found”. He tenido que investigar bastante para solucionar este error, que no me había dado nunca. Parece que con esta nueva versión (Ganymede) del entorno para C/C++ (llamado CDT) han “recuperado” un antiguo bug que ya estaba solucionado. Si Eclipse está funcionando con Cygwin, utilizará el archivo C:\Archivos de programa\cygwin\etc\setup\installed.db para comprobar qué es lo que hay instalado en Cygwin y qué no. Si editamos ese archivo veremos las líneas:

gcc-core gcc-core-3.4.4-3.tar.bz2 0
gcc-g++ gcc-g++-3.4.4-3.tar.bz2 0

Pero no encontraremos información de que el paquete gcc esté instalado (y con razón, puesto que se trata del gcc-core). Si añadimos una línea antes de estas (el orden es alfabético) con:

gcc gcc-core-3.4.4-3.tar.bz2 0

Salvamos y volvemos a ejecutar el Run en Eclipse, nos pedirá seleccionar un Debugger (optaremos por el gdb de Cygwin, que tenemos instalado), y ahora ya funcionará correctamente. Es de suponer que “volverán” a solucionar esto.

Un último detalle. Vamos a la configuración del proyecto (botón derecho sobre el nombre del proyecto, Properties, C/C++ Build, Binary Parsers. No hay ninguno seleccionado, así que seleccionaremos Cygwin PE Parser, Apply, Ok. Nos organizará los archivos del proyecto contando con esta nueva información y si ahora tratamos de “leer” el ejecutable Test01.exe desde Eclipse nos lo abrirá correctamente contando con que tiene la información para leer ejecutables.

Si queremos hacer este último paso genérico para todos los nuevos proyectos que creemos: Window, Preferences, C/C++, New CDT project wizard, MakeFile project, y ahí seleccionamos el Binary Parser correspondiente.

Un poco más complicado que Aceptar, Aceptar, Aceptar, pero tampoco ha sido traumático, ¿no?

Etiquetas: , , , , ,

Esta entrada fue escrita el Jueves 10 de Julio de 2008 a las 1:03 pm y está archivada en la categoría Blog. Puedes seguir las respuestas y comentarios en el feed RSS 2.0. Puedes dejar un comentario, o dejar un trackback desde tu propia página.

21 comentarios en “Usando Eclipse para desarrollo C++ sobre Windows”

  1. zapi pasó por aquí el Lunes 16 de Febrero de 2009 a las 7:26 pm, y escribió:

    GRACIAS!!!!!
    ya tengo un nuevo dios a quien orar!!jajaja

    soy estudiante de 1º de ing. informatica, y se me habia metido entre ceja y ceja poder hacer programas en C en eclipse bajo windows, si no es por ti, todavia estoy peleando con mi pc!jejeje

  2. Vaya, me alegro de verdad de que le haya sido útil a alguien.

    Suerte con la carrera! ;)

  3. Sandino pasó por aquí el Jueves 12 de Marzo de 2009 a las 11:07 pm, y escribió:

    Gracias Master IVan!!!

    JJaajajaj que legal me tenia re podrido este Eclipse de mierda…y no lo podia configurar…
    Salu2 desde Montevideo.

  4. De nada! Suerte!

  5. Maria pasó por aquí el Martes 24 de Marzo de 2009 a las 10:51 am, y escribió:

    Hola!!!!

    Pues yo sigo con mi problemilla de ‘Launch failed. Binary not found” y es que a mi no me salen las lineas
    gcc-core gcc-core-3.4.4-3.tar.bz2 0
    gcc-g++ gcc-g++-3.4.4-3.tar.bz2 0

    en el installed.db. Te copi-pasteo lo que tengo yo y haber si me puedes echar una mano

    INSTALLED.DB 2
    alternatives alternatives-1.3.30c-2.tar.bz2 0
    ash ash-20040127-4.tar.bz2 0
    base-files base-files-3.7-1.tar.bz2 0
    base-passwd base-passwd-2.2-1.tar.bz2 0
    bash bash-3.2.48-21.tar.bz2 0
    bzip2 bzip2-1.0.5-3.tar.bz2 0
    coreutils coreutils-6.10-2.tar.bz2 0
    crypt crypt-1.1-1.tar.bz2 0
    cygutils cygutils-1.3.2-1.tar.bz2 0
    cygwin cygwin-1.5.25-15.tar.bz2 0
    cygwin-doc cygwin-doc-1.4-4.tar.bz2 0
    e2fsprogs e2fsprogs-1.35-3.tar.bz2 0
    editrights editrights-1.01-2.tar.bz2 0
    expat expat-2.0.1-1.tar.bz2 0
    findutils findutils-4.4.0-3.tar.bz2 0
    gawk gawk-3.1.6-1.tar.bz2 0
    grep grep-2.5.3-1.tar.bz2 0
    groff groff-1.19.2-2.tar.bz2 0
    gzip gzip-1.3.12-2.tar.bz2 0
    less less-382-1.tar.bz2 0
    libbz2_1 libbz2_1-1.0.5-3.tar.bz2 0
    libdb4.5 libdb4.5-4.5.20.2-2.tar.bz2 0
    libexpat1 libexpat1-2.0.1-1.tar.bz2 0
    libexpat1-devel libexpat1-devel-2.0.1-1.tar.bz2 0
    libgcc1 libgcc1-4.3.2-2.tar.bz2 0
    libgdbm4 libgdbm4-1.8.3-9.tar.bz2 0
    libiconv2 libiconv2-1.12-1.tar.bz2 0
    libintl3 libintl3-0.14.5-1.tar.bz2 0
    libintl8 libintl8-0.17-3.tar.bz2 0
    libncurses8 libncurses8-5.5-4.tar.bz2 0
    libpcre0 libpcre0-7.8-1.tar.bz2 0
    libpopt0 libpopt0-1.6.4-4.tar.bz2 0
    libreadline6 libreadline6-5.2.13-11.tar.bz2 0
    login login-1.9-8.tar.bz2 0
    man man-1.6e-1.tar.bz2 0
    perl perl-5.10.0-5.tar.bz2 0
    rebase rebase-2.4.4-1.tar.bz2 0
    run run-1.1.10-1.tar.bz2 0
    sed sed-4.1.5-2.tar.bz2 0
    tar tar-1.21-1.tar.bz2 0
    termcap termcap-20050421-1.tar.bz2 0
    terminfo terminfo-5.7_20090228-1.tar.bz2 0
    terminfo0 terminfo0-5.5_20061104-2.tar.bz2 0
    texinfo texinfo-4.13-1.tar.bz2 0
    tzcode tzcode-2008h-1.tar.bz2 0
    util-linux util-linux-2.14.1-1.tar.bz2 0
    which which-2.20-1.tar.bz2 0
    zlib zlib-1.2.3-3.tar.bz2 0
    zlib-devel zlib-devel-1.2.3-3.tar.bz2 0
    zlib0 zlib0-1.2.3-3.tar.bz2 0
    _update-info-dir _update-info-dir-00812-1.tar.bz2 0

    y esto es todo. Muchas gracias por todo

    Un saludo

  6. Si no te aparecen en esa lista supongo que sera porque no has instalado los compiladores y herramientas relacionadas.

    Vuelve a arrancar el sistema de instalacion de Cygwin y cuando llegues a la lista de paquetes, marca gcc, gcc-core, gcc-g++, gdb y make (hablo de memoria, creo que son esos nombres), y vuelve a probar despues a ver si tienes suerte.

    Echale un vistazo a este otro post:
    http://www.neverbyte.net/archivo/instalando-cygwin/

    Y releete este entero para estar seguro de que no te olvidas ningun paso. Si con eso no consigues solucionarlo, no se me ocurre ninguna otra cosa.

    De todas formas, ten en cuenta que esto esta escrito en Junio del año pasado, cuando la version de Eclipse era Ganymede, no se si ha aparecido alguna otra version desde entonces en la que haya cambiado algo, porque hace tiempo que no lo utilizo :(

  7. [...] estado probando la nueva versión de Eclipse (de nombre Galileo) y el tutorial que escribí para la anterior versión (Ganímedes) sigue siendo válido, aunque dejo aquí algunos posibles apuntes para quien quiera [...]

  8. Jose Luis pasó por aquí el Miércoles 29 de Julio de 2009 a las 6:37 am, y escribió:

    Me parece increible que para usar el eclipse se requiera un API completo de linux (como 300MB de descarga de internet) como el cygwin solo para tener el gcc y que eclipse lo pueda usar

  9. Eclipse es solo un IDE, no un compilador. Tu escoges que compilador utilizar.

    Si yo he escogido gcc, tengo que escoger una version de gcc que funcione bajo windows. Como eso no existe, lo que hago es escoger una de Linux (tomando como opciones para que funcione Cygwin o MinGW o algo similar).

    Naturalmente, con esto realmente se esta compilando un ejecutable que seguira necesitando las dll de Cygwin para poder funcionar… por lo que utilidad tiene la justa, pero permite hacer algo similar a un cross-compiling, dado que el proyecto (en teoria) seria multiplataforma.

    Hay otros compiladores (y de otros lenguajes) para utilizar junto a eclipse, esto no es una obligacion :P

  10. Pablo pasó por aquí el Lunes 12 de Octubre de 2009 a las 10:18 am, y escribió:

    Después de instalar y configurarlo todo, los proyectos me compilan bien dentro de Eclipse… el problema es que cuando quiero ejecutarlos no puedo. Me sale el mensaje de error: “(nombre_del_ejecutable).exe dejó de funcionar”.

    Alguien sabe a qué puede ser debido?

    PD: si compilo algún programa en la consola de Cygwin desde Cygwin.bat y ejecuto el programa compilado desde la consola funciona. Sin embargo cuando abro el .exe generado desde el navegador vuelve a aparecer el mismo mensaje de error de antes.

  11. Pablo pasó por aquí el Lunes 12 de Octubre de 2009 a las 10:26 am, y escribió:

    Quisiera añadir que utilizo Windows Vista, que la versión de Eclipse es la Galileo y que además de poner “(nombre_del_ejecutable).exe dejó de funcionar”, aparece este otro error simultáneamente (si ejecuto el .exe fuera de Eclipse): Error al iniciar la ejecución porque no se encontró cygwin1.dll

  12. Pablo pasó por aquí el Lunes 12 de Octubre de 2009 a las 10:35 am, y escribió:

    He conseguido solucionar el problema buscando por mi ordenador el archivo cygwin1.dll (encontré únicamente ese archivo en la carpeta del jDownloader) y poniéndolo en C:\Windows\System32

  13. Hola Pablo,

    El problema era, efectivamente, porque no te encontraba las librerias de cygwin. Para solucionarlo definitivamente, lo que tienes que hacer es añadir el directorio donde encontraste ese cygwin1.dll al path del sistema, como esta explicado en el “paso 2″ (no se si en Vista esto se hace en otro menu distinto, no lo utilizo asi que no se decirte).

    Si haces eso, siempre sabra encontrarte esas librerias en cualquier proyecto nuevo que hagas.

  14. Christian pasó por aquí el Sábado 24 de Octubre de 2009 a las 11:07 pm, y escribió:

    Este es el mejor manual que he visto en toda mi vida la forma en como lo explicas es muy simple concreto y a la vez detallado les recomiendo a cualquiera que desee aprender un lenguaje mas de programacion

  15. Gracias!! Si te ha servido ya me doy por satisfecho!

  16. makedil pasó por aquí el Viernes 30 de Octubre de 2009 a las 12:38 am, y escribió:

    Maria: Yo tenia el mismo problema que tienes, pero la verdad la solucion es muy sencilla, yo tambien no seleccionaba lo que deberia cuando deberia descargar el cygwin, presta atencion a cual fue el problema.Cuando llegues a la lista de paquetes que deseamos descargar del cygwin, marca gcc, gcc-core, gcc-g++, gdb y make, ES MUY IMPORTANTE NO LO OLVIDES.

    Iván Alonso, la verdad que cuando salio ECLIPSE, muy poco me animaba a programar en dicha herrramienta, a pesar que programo en c++, hace mucho, gracias de verdad….

  17. jose pasó por aquí el Jueves 26 de Noviembre de 2009 a las 3:22 pm, y escribió:

    Hola, segui todos los pasos pero aun me sigue diciendo “binary not found”. Ademas a mi me instalo otras versiones de los paquetes:

    gcc gcc-3.4.4-999.tar.bz2 0
    gcc-ada gcc-ada-3.4.4-999.tar.bz2 0
    gcc-core gcc-core-3.4.4-999.tar.bz2 0
    gcc-g++ gcc-g++-3.4.4-3.tar.bz2 0
    gcc-gdc gcc-gdc-3.4.4-999.tar.bz2 0
    gcc4-core gcc4-core-4.3.2-2.tar.bz2 0
    gdb gdb-6.8-2.tar.bz2 0

    Tal vez la linea que deba agregar no es la misma que la que tu pusiste.
    Que puedo hacer??

  18. Prueba a ejecutar gcc desde la linea de comandos, si no te encuentra el ejecutable es un problema del Path de Windows.

  19. Sandra pasó por aquí el Miércoles 3 de Febrero de 2010 a las 3:28 am, y escribió:

    Muchas gracias por el tutorial pero tengo un problema, al intentar abrir un nuevo proyecto queda en blanco

    http://img685.imageshack.us/img685/223/eclipseq.png

    y no encuentro el Binary Parsers

  20. Hola todo es perfecto el problema es que cuando compilo y le paso el make para que genere un exe y lo ejecute en windows… este programa me manda el siguiente mensaje
    —————————
    Hola_mundo.exe – Error del sistema
    —————————
    El programa no puede iniciarse porque falta cygwin1.dll en el equipo. Intente reinstalar el programa para corregir este problema.
    —————————
    Aceptar
    —————————

    Si, saben como hacer para que no me pida el archivo cygwin1.dll seria estupendo (se que si coloco en las variables globales del sistema “PATH” C:/Cygwin/BIN , el programa se ejecuta a la perfecion pero por ejemplo otra persona que no tenga el cygwin1.dll NO PODRA EJECUTARLO y lo tendra que bajar de internet) ASI que lo que requiero es que NO me pida cygwin1.dll GRAX =D

  21. Hola darkchicles, en este caso no puedes hacerlo de otro modo, ya que estas compilando y generando el ejecutable desde la plataforma cygwin, por lo que seguiras necesitando esa dll para poder ejecutarlo correctamente. Puedes redistribuir esa libreria junto con tu ejecutable, y asi cualquiera podra utilizar la aplicacion.

    Si lo que quieres es generar un ejecutable que no dependa de cygwin, entonces tendras que utilizar un metodo distinto, que no incluya el uso del compilador ni el linker de cygwin :(

Deja tu comentario