C'e` un equivoco di fondo.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.
'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
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.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