Instalar una librería compilada en Codeblocks con MinGW

Noviembre 2016


1. Requisitos

  • Disponer de una versión de Codeblocks que trabaje con el compilador MinGW.
  • Tener el binario de una librería externa que también esté compilado para MinGW.


En el ejemplo que sigue, utilizaremos la librería libcurl para ilustrar el método que vamos a utilizar, es decir, en la fecha en que estas líneas son escritas, y para la versión actual estable de libcurl:
http://curl.haxx.se/gknw.net/7.28.1/dist-w32/curl-7.28.1-devel-mingw32.zip
(entra al siguiente enlace para obtener la versión actualizada: http://curl.haxx.se/download.html)

Este método puede ser utilizado con Codeblocks utilizando MinGW, para cualquier librería compilada para MinGW.

2. Métodos:

2.1 Descomprimir en un directorio centralizando las librerías externas utilizadas


Descomprime el fichero que contiene la librería compilada en un directorio (utilizaremos un nombre sin espacios).
Por ejemplo: c:\libs\curl-7.28.1-devel-mingw32\

2.2 Integración al proyecto Codeblocks: 2 etapas


En Codeblocks, hay 2 cosas que se debe hacer para que un proyecto pueda integrar una librería adicional:

2.2.1 Indicar al compilador el lugar donde se encuentran los archivos .h


Indicar al compilador el lugar donde se encuentran los ficheros .h permite que éste no genere errores cuando insertemos las #include correspondientes a la librería en el código fuente.
Esto lo hacemos en: Project - Build options... - Hacemos clic en la raíz del proyecto (no en Debug o Target, si no, los parámetros solo se aplican al destino)

Pestaña "Search directories" - Add - busca el directorio de la librería que contiene las .h (por ejemplo, en el caso de libcurl c:\libs\curl-7.28.1-devel-mingw32\include) y selecciona ese directorio.

2.2.2 Indicar al editor enlaces con los que debe encontrar los binarios de la librería


El hecho de Indicar al editor enlaces en los que debe encontrar los binarios de la librería le permite generar el ejecutable después de la compilación. Para el entrono MinGW, los binarios de la librería son ficheros con extensión .a

Esto lo hacemos en Project - Build options... - Hacemos clic en la raíz del proyecto (no en Debug ni Target, si no los parámetros solo se aplicarán al destino, a menos que utilicemos librerías de depuración para una librería dada).

Pestaña "Linker settings" - Add - buscar el directorio de la librería que contiene las .a (por ejemplo, en el caso de libcurl c:\libs\curl-7.28.1-devel-mingw32\lib) y seleccionar las partes de la librería que necesitamos en el proyecto.

3. Notas

3.1 ficheros .dll


Dependiendo de cómo hayamos configurado nuestro proyecto (enlazado dinámico o estático), tendremos que copiar las .dll en el directorio del ejecutable (o en el PATH de Windows) para que la carga dinámica de la librería pueda ocurrir.

En el caso de libcurl, las .dll están contenidas en c:\libs\curl-7.28.1-devel-mingw32\bin

Se añadiría, por ejemplo, en el directorio "Target" del proyecto, que contiene el ejecutable generado por la compilación (o en alguna parte en el PATH). Esto es necesario únicamente en caso de compilación con enlazado dinámico y para lanzar el ejecutable fuera del entorno de desarrollo.

Si no lo hubiéramos hecho, nos daremos cuenta durante la ejecución (haciendo doble clic sobre el fichero .exe): un mensaje nos indicará si alguna .dll no ha sido encontrada.

3.2 Rutas absolutas o relativas


Cuando se configura Codeblocks (etapas 2.2.1 y 2.2.2), luego de seleccionar una fuente, nos preguntará "Keep this as a relative path ?".

En caso de respuesta afirmativa, esto significa que Codeblocks no conservará la ruta absoluta hacia el recurso indicado (por ejemplo c:\libs\curl-7.28.1-devel-mingw32\lib\libcurl.a)", sino solo la ruta relativa en relación al directorio del proyecto (por ejemplo, algo como "..\..\..\libs\curl-7.28.1-devel-mingw32\lib\libcurl.a).

Es útil especificar una ruta relativa si los recursos se encuentran dentro del directorio del proyecto, ya que el proyecto seguirá siendo compilable en otra máquina con Codeblock. Los recursos estarán en el mismo lugar relativamente al directorio del proyecto, cualquiera que sea la ubicación del proyecto en la nueva máquina.

En cambio, si los recursos están fuera (es mejor ponerlos fuera, para agrupar las librerías en un lugar en el que los otros proyectos puedan encontrarlo, como c:\libs y evitar duplicarlos) y movemos el proyecto, las referencias serán rotas. En este caso, deberíamos especificar rutas absolutas.

3.3 No copiar la librería externa en las carpetas MinGW de Codeblocks


Esto puede funcionar, y seguro que encontrarás tutoriales diciéndote que lo hagas.
Sin embargo, no te recomiendo hacerlo, a menos que quieras:
-hacerte un lio con la instalación de Codeblocks
-volver a instalar todas las librerías ya que actualizas Codeblocks o MinGW. Las carpetas por defecto de Codeblocks o MinGW son eliminadas y vueltas a crear en este proceso.
-no saber dónde se encuentra tal versión de la librería que solo compila con tal fuente que utilizas
-no saber cómo actualizar las librerías

3.4 Terminología


En este artículo hemos utilizado el término "librería". Este es un anglicismo (del termino library), que suele ser utilizado por los programadores.

Consulta también :
El documento «Instalar una librería compilada en Codeblocks con MinGW» de CCM (es.ccm.net) se encuentra disponible bajo una licencia Creative Commons. Puedes copiarlo o modificarlo siempre y cuando respetes las condiciones de dicha licencia y des crédito a CCM.