Cómo instalar una librería compilada en Codeblocks con MinGW
En este artículo te indicamos los requisitos necesarios para instalar una librería compilada en Codeblocks con MinGW y te enseñamos distintos métodos para llevarlo a cabo.
¿Cuáles son los requisitos para compilar en Codeblocks?
- 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. Este método puede ser utilizado con Codeblocks utilizando MinGW para cualquier librería compilada para MinGW.
¿Qué métodos de compilación existen?
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\ Integración al proyecto Codeblocks: 2 etapas
Hay dos cosas que se deben de hacer en Codeblocks para que un proyecto pueda integrar una librería adicional:
- Indicar al compilador el lugar donde se encuentran los archivos .h
Indicar al compilador el lugar donde se encuentran los ficheros .h permite que este no genere errores cuando insertemos las #include correspondientes a la librería en el código fuente.
Esto lo hacemos en: Project - Build options… y hacemos clic en la raíz del proyecto (no en Debug o Target, de lo contrario los parámetros solo se aplicarán al destino)
En la 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.
- Indicarle al editor enlaces con los que debe encontrar los binarios de la librería
El hecho de indicarle 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 entorno MinGW, los binarios de la librería son ficheros con extensión .a
Esto lo hacemos en Project - Build options... y hacemos clic en la raíz del proyecto, no en Debug ni Target. En caso contrario los parámetros sólo se aplicarán al destino, a menos que utilicemos librerías de depuración.
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.
¿Qué notas debemos tomar en cuenta?
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 daríamos cuenta durante la ejecución (haciendo doble clic sobre el fichero .exe) que un mensaje nos indicará si alguna .dll no ha sido encontrada.
Rutas absolutas o relativas
Cuando se configura Codeblocks (etapas 2.2.1 y 2.2.2), después 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 que el directorio del proyecto, cualquiera que sea la ubicación del proyecto en la nueva máquina.
En cambio, si los recursos están fuera (esto es mejor 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.
No copiar la librería externa en las carpetas MinGW de Codeblocks
Esto puede funcionar y seguro que encuentras tutoriales impulsandote a hacerlo. Sin embargo, no te recomiendo hacerlo a menos que quieras:
- Hacerte un lío 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 x versión de la librería que solo compila con x fuente.
- No saber cómo actualizar las librerías.