linux user group brescia

immagine del castello

Archivio della mailing list

math.h

Luca Giuzzi giuzzi a lugbs.linux.it
Gio 12 Dic 2002 10:59:56 UTC
On Thu, Dec 12, 2002 at 11:43:06AM +0100, marco wrote:
> 
> Ciao,
>         ho scritto un programma in C che deve fare dei calcoli usando la
> funzione cos. Includo la libreria math.h, che esiste ed e'contenuta in
> /usr/include ma quando compilo il programma um messaggio di errore mi dice:
> Undefined reference to 'cos'
> 
I dati che fornisci SAREBBERO un po' pochini, non fosse che il problema
 che descrivi e' di facile soluzione.

Quando usi una libreria in C ci sono due operazioni da fare
 a) includere gli headers che descrivono COME richiamare le funzioni
    della libreria stessa (ie. nomi e parametri piu' eventualmente tipi 
    di dato)
 b) collegare la libreria al tuo programma.

La generazione di un eseguibile infatti si compone di 2 fasi:
 1) la compilazione vera e propria
 2) il linking del file oggetto cosi' generato con le librerie necessarie
    [e alcuni blocchi di codice, tipo /usr/lib/crt1.o che servono ad
     inizializzare un eseguibile ELF]

In generale il comando 
 gcc sorgente.c -c
genera un file oggetto sorgente.o che contiene il compilato di sorgente,
 ma non i riferimenti alle librerie.

gcc sorgente.c -o eseguibile

genera un `eseguibile' sorgente a partire da sorgente.c linkando l'oggetto
 di cui sopra (sorgente.o, per intenderci, anche se in questo caso il
 nome temporaneo sara' diverso... ) e lo collega alla libc ma, come
 default, NON alla libm (in cui ci sono le funzioni matematiche).

Ergo:
 nel tuo caso devi compilare con

 gcc sorgente.c -o eseguibile -lm

 oppure (separando le fasi di link e compilazione)

 gcc sorgente.c -c
 gcc -o eseguibile sorgente.o -lm


Ciao,
 lg


> Qualche suggerimento?
> Grazie
>                             Marco Antonioli

-- 



Maggiori informazioni sulla lista Lug