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   -

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
.h
necesarios para el funcionamiento de los
#include
y de los archivos
 .a
que 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
.h
permite 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\include
que 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.h
sea 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
.dll
en 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
.dll
se 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
.dll
no 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:\libs
y 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

1 respuesta

  1. [Dal] Mensajes publicados 6122 Fecha de registro   Estado Colaborador Última intervención   1 108
     
    I am unable to translate or process the provided content because it appears to be a placeholder or non-textual reference ("faq/35736"). If you meant to provide a specific text for translation, please paste the exact French text you want translated into Spanish, and I will translate it faithfully.
    0