Codeblocks: instalar una biblioteca (librería)
[Dal]
Mensajes publicados
6122
Fecha de registro
Estado
Colaborador
Última intervención
-
[Dal] Mensajes publicados 6122 Fecha de registro Estado Colaborador Última intervención -
[Dal] Mensajes publicados 6122 Fecha de registro Estado Colaborador Última intervención -
Instalar en Codeblocks con MinGW una biblioteca (librería) compilada para MinGW
Prerrequisitos
Dispone de una versión de Codeblocks que funciona con el compilador MinGW y ha obtenido un binario de una biblioteca externa que desea usar, y que también está compilada para MinGW.Debe saber si dispone de una versión de 64 bits o 32 bits de MinGW y usar una biblioteca compilada para MinGW para la misma arquitectura (64 bits o 32 bits).
Si ha instalado Codeblocks con una versión que incluye MinGW desde esta página, dispone de una versión de 64 bits, salvo si ha descargado una versión específica de 32 bits.
En el ejemplo que sigue, usaremos la biblioteca libcurl para ilustrar el método a utilizar, es decir, a la fecha en que se escriben estas líneas, y para la versión estable actual de libcurl, esto:
https://curl.se/windows/dl-7.83.1/curl-7.83.1-win64-mingw.zip
(ir a ver la versión actualizada en https://curl.se/download.html o en https://curl.se/windows/)
Este método puede utilizarse con Codeblocks que empleen MinGW, para cualquier biblioteca compilada para MinGW.
Lo que descargue debe contener los archivos
.hnecesarios para el funcionamiento de los
#includey de los archivos
.aque contienen los binarios, es decir, los elementos precompilados de la biblioteca, y eventualmente de
.dll.
Método
Descompresión en un directorio centralizando las bibliotecas externas utilizadas
Descomprime el archivo que contiene la biblioteca compilada en un directorio no muy complicado, y con un nombre sin espacios.Por ejemplo:
c:\libs\curl-7.83.1-win64-mingw\
Integración al proyecto Codeblocks: 2 etapas
En Codeblocks, hay 2 cosas que hacer para que un proyecto pueda utilizar una biblioteca adicional:Indicar al compilador dónde debe encontrar los archivos .h
Indicar al compilador dónde debe encontrar los archivos.hpermite que éste no genere errores cuando se insertan #include correspondientes a la biblioteca en el código fuente.
Se hace en: Proyecto - Opciones de compilación... - Hacer clic en la raíz del proyecto (no en las celdas Debug o Target, de lo contrario los parámetros se aplicarán sólo a la meta)
Pestaña "Search directories" - Añadir - buscar el directorio de la biblioteca que contiene los .h y seleccionar ese directorio.
Por ejemplo, en el caso de libcurl este directorio es
c:\libs\curl-7.83.1-win64-mingw\includeque contiene "curl". Como la documentación de la biblioteca libcurl indica hacer
#include <curl/curl.h>, hay que seleccionar el directorio padre de "curl" para que
curl.hsea accesible mediante una ruta
curl/curl.h.
Indicar al editor de enlaces dónde debe encontrar los binarios de la biblioteca
Indicar al editor de enlaces dónde debe encontrar los binarios de la biblioteca permite que éste genere el ejecutable tras la compilación. Para el entorno MinGW, los binarios de la biblioteca son archivos cuyo nombre de extensión es.a.
Se hace en: Proyecto - Opciones de compilación... - Hacer clic en la raíz del proyecto (no en las celdas Debug o Target, de lo contrario los parámetros se aplican sólo a la meta, salvo si se utilizan bibliotecas de depuración para una biblioteca dada, ahí se vuelve útil distinguir según las metas)
Pestaña "Linker settings" - Add - buscar el directorio de la biblioteca que contiene las
.a(por ejemplo, en el caso de libcurl
c:\libs\curl-7.83.1-win64-mingw\lib) y seleccionar las partes de la biblioteca que se necesitan en el marco del proyecto.
Si no lo sabe, consulte la documentación de la biblioteca (o, a modo de prueba, compile el proyecto, vea los mensajes de error y añada las partes necesarias, o, a lo bruto, añada todo :-).
Notas
archivos .dll
Dependiendo de la forma en que configure su proyecto (enlace dinámico o estático), puede que tenga que copiar archivos.dllen el directorio del ejecutable (o en el PATH de Windows) para que el cargador dinámico de la biblioteca pueda funcionar.
En el caso de libcurl, los
.dllse encuentran en
c:\libs\curl-7.83.1-win64-mingw\bin.
Habría que añadirlos, por ejemplo, en el directorio "Target" del proyecto, que contiene el ejecutable generado por la compilación (o en algún lugar del PATH), y esto es necesario solo en caso de compilación con enlace dinámico y para lanzar el ejecutable fuera del entorno de desarrollo.
Si no lo ha hecho, se dará cuenta al ejecutar (al hacer doble clic en el archivo
.exe): un mensaje advertirá que tal o cual
.dllno se encontró.
Rutas relativas o absolutas
Al configurar Codeblocks, después de seleccionar un recurso, se le pregunta "Keep this as a relative path ?".En caso afirmativo, significa que Codeblocks no conservará la ruta absoluta hacia el recurso indicado (por ejemplo "
c:\libs\curl-7.83.1-win64-mingw\lib\libcurl.a"), sino solo la ruta relativa respecto al directorio del proyecto (por ejemplo, algo como "
..\..\..\libs\curl-7.83.1-win64-mingw\lib\libcurl.a").
Es útil especificar una ruta relativa si los recursos están accesibles dentro del directorio del proyecto, porque el proyecto permanecerá compilable en otra máquina con Codeblocks, los recursos estando en el mismo lugar relativo al directorio del proyecto, y esto independientemente de la ubicación del proyecto en la nueva máquina.
En cambio, si los recursos están en otro lugar (es mejor colocarlos en otro sitio para agrupar las bibliotecas en un lugar identificado donde los distintos proyectos puedan encontrarlas, como
c:\libsy evitar duplicaciones), y se mueve el proyecto, las referencias se romperán. En ese caso, se deberían especificar rutas absolutas.
No copiar la libraíria externa en los directorios MinGW de Codeblocks
Esto puede funcionar, y habrá tutoriales que le digan que lo haga.Sin embargo, le desaconsejo hacerlo, a menos que quiera:
- desordenar su instalación de Codeblocks
- tener que reinstalar todas sus bibliotecas al actualizar Codeblocks o MinGW y ver que los directorios por defecto de Codeblocks o MinGW se eliminan y recrean en este proceso
- no saber dónde se encuentra tal versión de la biblioteca que solo compila con el código fuente que utiliza
- no saber cómo actualizar sus bibliotecas
Terminología
En las líneas anteriores, se utilizó el término "bibliothèque" o "librairie". Este último es un anglicismo (del término "library"), que a menudo utilizan los programadores.Deberíamos decir, en buen francés, "bibliothèque", pero hemos supuesto que ambos términos son sinónimos para nuestra ficha :-)
Dal
1ª publicación: 2013-01-29 10:56:41 por [Dal]
Catég.: Fichas prácticas - Programmation - Langages - Langage C
Cette fiche est (c) [Dal] 2013-2022