La stringa sopracitata compare seguita dal nome di una funzione per la quale il linker non è in grado di identificare un riferimento valido: in altre parole il linker non sa dove prendere il codice corrispondente a quella funzione.
Il problema è dovuto ad una di queste due cause:
- non è stato incluso l'header file contenente la definizione della funzione utilizzata;
- l'header è presente ma la funzione appartiene ad una libreria dinamica (o condivisa).
Nel primo caso, ovviamente, è sufficiente aggiungere l'include mancante.
Nel secondo, invece, è necessario utilizzare un'opportuna opzione di compilazione che permetterà al linker ld di trovare il codice corrispondente alla funzione utilizzata. Esiste un'opzione specifica per ogni libreria condivisa installata sul proprio sistema: tutte hanno la forma -l<id>, dove <id> è una stringa ti testo che identifica la specifica libreria.
Ecco alcuni esempi particolarmente comuni:
- -lm (libreria matematica, math.h)
- -lncurses (libreria grafica ncurses, ncurses.h)
- -lpthread (libreria per thread POSIX, pthread.h)
Di seguito un esempio di utilizzo:
gcc main.c -o main -lm
Nessun commento:
Posta un commento