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
|