Agregar bibliotecas
Para acceder a funciones de algunas bibliotecas (como las commons, pthread o readline) hace falta avisarle al linker que las vincule al momento de compilar.
Por ejemplo, si intentamos compilar este código:
#include <stdlib.h>
#include <stdio.h>
#include <commons/collections/list.h>
int main(int argc, char *argv[]) {
t_list *names = list_create();
list_add(names, "Mick");
list_add(names, "Keith");
list_add(names, "Ronnie");
list_add(names, "Charlie");
list_iterate(names, (void *)puts);
return 0;
}Nos aparecerá el error:
undefined reference to 'list_create'
undefined reference to 'list_add'
undefined reference to 'list_add'
undefined reference to 'list_add'
undefined reference to 'list_add'
undefined reference to 'list_iterate'Para agregar una biblioteca debemos editar la variable LIBS del archivo settings.mk del proyecto. Por ejemplo:
# Libraries
LIBS=commonsSi queremos agregar más de una, cada nombre debe ir separado por espacios.
¿Qué hicimos al editar esta variable?
Editar la variable LIBS permite incluir el flag -l para linkear la biblioteca que queremos usar al momento de la compilación con gcc. Al ejecutar make veremos algo como:
gcc -o bin/ejemplo.out src/main.c -lcommonsEse -lcommons es lo que agregamos al editar LIBS.
¿Cómo funciona el flag "-l"?
Por defecto, el linker solamente va a buscar bibliotecas en las siguientes tres rutas:
/lib
/usr/lib
/usr/local/libSe pueden agregar más rutas pasándole a gcc el flag -L{ruta-a-biblioteca} o editando la variable de entorno[1] LIBRARY_PATH.
Si te estás preguntando: "¿qué c&@$#/°s es una variable de entorno?" No te preocupes, podés encontrar una explicación simple en nuestra guía de Bash ↩︎
Create SisOp App