Newsgroup: it.comp.os.linux.development
Titolo: gcc non mi dice la riga dov'è l'errore...

Ciao a tutti,
ho controllato sul man ma non ho trovato nulla:
se in un programma è presente un errore, il gcc mi dice solo la funzione
all'interno della quale è l'errore ma non il numero della riga. C'è forse
un'opzione del compilatore che serve a questo?
GRAZIE
Daniele.


questa mi giunge nuova!!!
puoi spedire l'otput del compilatore?
forse l'errore non è nella fase di compilazione, ma in quella di linkaggio
con le librerie e i file oggetto.
ciao ciao


Prego (anche se serve a poco).
-- 
Ciao ciao.
                                                       +++ Giuseppe


forse hai ragione...
GRAZIE mille!
Daniele.

 scrisse:
-> 
-> >Ciao a tutti,
-> >ho controllato sul man ma non ho trovato nulla:
-> >se in un programma è presente un errore, il gcc mi dice solo la funzione
-> >all'interno della quale è l'errore ma non il numero della riga. C'è forse
-> >un'opzione del compilatore che serve a questo?
-> >
-> 
-> Ciao,
-> 
-> non è che tu stia confondendo i messaggi di errore del compilatore con
-> quelli del linker?
-> 
-> Il compilatore *dice* in quale riga si è verificato l'errore:
-> 
-> [i1epj@ppro i1epj]$ cat > errore1.c
-> #include <stdio.h>
-> 
-> int main(void)
-> {
-> 	printf(Hello, world!"); /* mancano le virgolette */
-> 	return 0;
-> }
-> [i1epj@ppro i1epj]$ gcc errore1.c
-> errore1.c:5: unterminated string or character constant
-> errore1.c:5: possible real start of unterminated constant
-> ^^^^^^^^^^^		
-> 
-> mentre il linker no:
-> 
-> [i1epj@ppro i1epj]$ cat > errore2.c
-> #include <stdio.h>
-> 
-> int main(void)
-> {
-> 	prontf("Hello, world!");  /* ho scritto prontf invece di printf */
-> 	return 0;
-> }
-> [i1epj@ppro i1epj]$ gcc errore2.c
-> /tmp/cceoDba4.o: In function `main':
-> /tmp/cceoDba4.o(.text+0xf): undefined reference to `prontf'
-> collect2: ld returned 1 exit status
-> 	
-> Del resto la cosa è logica, a meno di non aver compilato con le
-> informazioni di debug attivate (e forse nemmeno allora), il linker non
-> sa nulla circa i numeri di linea del sorgente e può solo dire qual è la 
-> funzione in cui ha trovato l'errore.
-> 
-> Quindi, ammesso che si possa fare, forse devi cercare nella man page di
-> ld, più che in quella del gcc.
No. Nel secondo caso non ti dice a che riga c'e' l'errore, per un semplice motivo:
la chiamata alla funzione prontf e' corretta (sintatticamente), quindi il compilatore
non ti puo' segnalare un errore, perche' potresti effettivamente avere una
funzione in qualche libreria che si chiama prontf.
La situazione e' questa in pratica: 
il compilatore non sa se prontf e' un errore o una funzione esterna, e quindi se
usata con una sintassi corretta, non genera un errore.
il linker non sa se e' un errore o meno, quindi ti dice soltanto che, nell'elenco
delle librerie che gli passi (in aggiunta a quelle di sistema) la funzione 
prontf non esiste, ma anche lui non sa se e' scritta giusta o sbagliata o se hai 
semplicemente dimenticato una libreria.
bye
Gianluca
-- 
Home Page                	Contro i brevetti del sw     Boicotta Microsoft
www.infinito.it/utenti/chewbe
 
no-patents.prosa.it/
 
www.boycott-ms.org/
 
"If we have to file a thousand lawsuits a day, we'll do it.
It's less expensive than losing CONTROL of YOUR creative works."
---Jack Valenti, President and CEO, Motion Picture Association of America


Appunto. Il compilatore *NON* può dare errore perchè non ce ne sono.
Il linker si lamenta che non trova prontf e basta perchè non può 
sapere se è un errore, potrebbe solo mancare un -lprontf 8-).
Sarebbe assai comodo però, per trovare a colpo sicuro dove nel
programma, tra diecimila printf, è scappata una prontf, che il linker 
potesse dire non solo "non trovo da nessuna parte la funzione prontf", 
ma anche qualcosa tipo "la funzione prontf, che non riesco a trovare, è
stata chiamata in errore2.c alla linea 5". 
Era questo, penso, il desiderio dell'iniziatore del thread ed in tale 
direzione proseguiva la risposta.


stata chiamata in errore2.c alla linea 5". 
non in un ambiente con comandi come grep sempre a disposizione.
in fondo, di chiamate a prontf() ce ne potrebbero essere diecimila, e
l'unico errore potrebbe essere proprio la mancanza della libreria come
parametro di compilinkaggio.:-)
Ciao.roberto
-- 
Save our planet!
Save wildlife;
For your E-MAIL use only recycled Bytes !!
roberto poggi  
rpo...@softhome.net