Originariamente inviato da romaluca
[...]Il problema è il seguente.
Ho installato la nuova libreria canlib.h (difatti risulta presente sotto la cartella /usr/include) e quando all'interno di un file sorgente cerco di richiamare una funzione dichiarata all'interno di questa, emergono in fase di compilazione i seguenti errori (tralasciando i warning):
[...]
Ciò che non non riesco a capire è come risolvere l'errore 'undefined reference to....', e mi servirebbe un vostro parere.
C'e` un equivoco di fondo.
'canlib.h', come la stragrande maggioranza degli header file in C, _non_ e` una libreria, bensi`, appunto, un header file; tali file contengono dichiarazioni, non definizioni.
Prototipi di funzioni, non implementazioni delle suddette.

Le definizioni, le variabili effettive, il codice vero e proprio insomma si trova (quasi sempre) infatti nelle librerie vere e proprie, che altro non sono che codice compilato con gli opportuni parametri.

Installare una libreria precompilata si traduce infatti in due passaggi: installare il o gli header file della libreria, in modo da rendere disponibile le dichiarazioni al codice che vorra` usare detta libreria, e installare l'implementazione della stessa, quella che convenzionalmente si chiama, appunto, libreria, che tradizionalmente si posiziona in /usr/lib o /lib o /usr/local/lib o in altro luogo

"undefined reference to" si ottiene quando si manca il secondo passo elencato. Il compilatore ha concluso con successo piu` o meno netto il suo lavoro, avendo prodotto file oggetto grazie (anche) alla presenza degli header file opportuni; la palla passerebbe a questo punto al linker, che dovrebbe collegare i file oggetto in modo opportuno alle librerie indicate (con collegamento statico o dinamico), dando forma infine il prodotto voluto, un eseguibile in questo caso.
Ma in questo caso mancano le librerie vere e proprie, e cosi` il linker non puo` trovare i "riferimenti" ai simboli presenti nel compilato (e dichiarati grazie agli header file inclusi)". E quindi fallisce.

Per cui, la soluzione e` installare la libreria vera e propria, e indicare a gcc (che invoca in modo trasparente il linker) come utilizzarla

p.s: un'altra cosa. Per compilare dalla shell di linux oltre al comando make seguito dal nome del file sorgente da compilare, quali altre operazioni dobbiamo eseguire? Ciao
beh, dipende da cosa vuoi/volete ottenere; make e` un frontend che puo` compiere molteplici azioni, tra cui, principalmente, guidare la compilazione/produzione di software.