Cambiando el compilador de C

Como casi todos sabeis, hace tiempo que decidimos que ya era hora de cambiar de compilador de C, no porque BCC++ no esté haciendo bien su trabajo, que salvo por un par de bugs se está comportando muy bien, sino porque desgraciadamente es un compilador sin futuro:

  • No genera código para 64 bits ni para otras plataformas, ni parece que tengan planes para hacerlo.
  • En cualquier momento puede desaparecer de la web de Embarcadero (que es la empresa que ha comprado los compiladores de Borland), y nos deja completamente con las manos vacias.


Hay muchos otros compiladores que podríamos escoger, pero lógicamente nos hemos centrado en aquellos que son gratuitos, para no obligar a nuestros usuarios a hacer un desembolso económico extra. Entre los que conocemos están:

  • MinGW
  • Pelles C
  • MSVC
  • Watcom C
  • Digital Mars
  • LCC

Seguramente hay mas, pero estos son los que conocemos. Los tres últimos los descartamos casi desde el principio simplemente porque no los conocemos lo suficiente o creemos que no son suficientemente «populares». Y MSVC (en su versión gratuita, VS Express 2008) la descartamos porque hay que descargar casi 1 GB para hacerlo funcionar, entre el propio VS y el Platform SDK. Además, aunque genera código para 64 bits, para ARM no es gratuito. Y también estaríamos siempre con la inseguridad de que MS podría dejar de ofrecerlo gratis en cualquier momento.

Finalmente nos hemos centrado en los dos primeros. Respecto a Pelles C, no es que sea muy popular, pero ciertamente es un paquete compacto de compilador y utilidades muy bien cuidado. Las primeras impresiones, antes incluso de intentar compilar ni siquiera el propio xHarbour, se pueden resumir así:

MinGW

Pros Contras
  • Es un compilador muy popular.
  • Puede generar código para 32 y 64 bits para Windows y también para procesadores ARM para Pocket PC, y además soportando ‘cross-compiling’.
  • Es un ‘port’ del compilador gcc, que es con el que compilan casi todo en Linux, así que entendemos que tiene que estar bien optimizado.
  • Al ser ‘open source’, podemos crear nuestro propio paquete instalable y colgarlo de nuestra web, y no depender de nadie más.
  • No está bien documentado, o al menos no contiene una buena documentación completa, clara y estructurada.
  • Es bastante ‘linuxero’, que no es que sea malo, pero difiere de las formas a las que estamos acostumbrados en Windows.
  • En xHarbour no lo usa (casi) nadie.

Pelles C

Pros Contras
  • También contiene por sí sólo todo lo necesario para compilar en Windows a 32 y 64 bits, además de para Pocket PC con procesadores ARM, y también soporta ‘cross-compiling’.
  • Tiene una buena documentación, muy clara, completa y sobre todo bien estructurada. Además, está en formato .chm, lo que permite integrarla en el IDE.
  • Es el compilador que utiliza xHarbour.com, lo que nos lleva a pensar que xHarbour tiene que funcionar bien con él.
  • Es mucho menos popular que MinGW.
  • No es ‘open source’.
  • No podemos preparar un instalable nuestro, y dependemos de sus autores.

 

Con todo esto presente, nos ponemos ‘manos a la obra’ y empezamos por lo más inmediato… compilar el propio xHarbour:

  • MinGW: Tuvimos bastantes problemas, ya que no está totalmente claro de antemano qué hace falta (make, msys, variables de entorno, etc.), pero finalmente, corrigiendo algunas cosas de los ficheros make, pudimos compilarlo. No obstante, no terminó todo el proceso, aunque sí está la parte que más nos interesa por ahora que es el compilador y las librerías. Esperabamos algo así, dada la falta de usuarios de xHarbour-MinGW, pero francamente fue un poco desesperante.
  • Pelles C: perfecto, sin ningún tipo de problemas. Y completo. Esperabamos que fuera más fácil que con MinGW, pero sinceramente no creíamos que fuera a salir a la primera.

Respecto a los tiempos de compilación, Pelles C es sólo un poco más lento que BCC++ (en torno a un 20%), mientras que MinGW es anormalmente lento. Tardó aproximadamente el triple que BCC++, contando sólo hasta el punto donde falló. En cualquier caso, no vamos a pararnos aquí, ya que la tarea de compilar xHarbour no es muy habitual, y por supuesto no tiene porqué recaer en el usuario; nosotros ya nos encargamos de eso y entregamos un paquete instalable listo para trabajar.

El siguiente paso consiste en compilar Xailer, pero como nos hemos vuelto muy cómodos y en vez de usar ficheros make y bat lo compilamos todo con XEdit, pues primero hay que modificar XEdit para que soporte estos otros compiladores de C. En la próxima entrada veremos estos cambios.

5 comentarios en “Cambiando el compilador de C

  1. HardBit

    Hola, es cierto que el IDE de Visual C++ 2008 pesa bastante, pero pueden utilizar el el compilador de VC++ 2003 el cual es bastante liviando (por que solo es el compilador) y pueden usar un IDE como CodeBlocks (http://www.codeblocks.org/) para el caso de ARM pueden usar el SDK Mobile que tambien es gratuito (http://tinyurl.com/opun2).

    En el caso del compilador de VC++2003 ya no esta disponible en el sitio pues redirecciona a VC++ 2008.
    Pueden solicitarme una copia del compilador.

    Creo que podrian retomar la opcion de usar el compilador de Microsoft y sus archivos compilacion (MSBuild)

    Todo esto gratuito y con licencia para hacer aplicaciones o librerias comerciales 😉

  2. José F. Giménez

    ‘HardBit’,

    Ese es precísamente unos de los grandes problemas de VC++ Express, que lo pueden quitar de la web cuando quieran, y nos dejan con las manos vacías.

    Y no importa que sea gratuito incluso para aplicaciones comerciales. El caso es que legalmente nosotros no podríamos colgar de nuestra web una versión anterior para que la pudieran descargar nuestros usuarios.

    En cambio, MinGW es GPL, lo que significa que nosotros podemos crear nuestra propia ‘distro’ y colgarla de nuestra web sin problemas. Y como su RTL es de dominio público, se pueden hacer también aplicaciones comerciales.

    En el caso de Pelles C, no es open source, pero estoy seguro de que si hubiera algún problema con una nueva versión podríamos contactar con sus autores para distribuir nosotros una versión anterior.

  3. Johan Donado B.

    Yo probé la compilación de mis aplicaciones con xHarbour y PellesC y tube problemas con las cadenas de caracteres muy largas.

    Resulta que unas consultas SQL las tengo en unas variables de tipo Character; compilando con Borland C no da problemas, pero al compilar con PellesC me arrojó error en tiempo de compilación, lo que me hace pensar que si en algún momento tengo que leer el contenido de un archivo texto o un campo MEMO y meterla en una variable, me va a dar error.

    Por ese motivo tuve que devolverme a compilar con Borland C.

Responder a HardBit Cancelar la respuesta