Indice del forum Olimpo Informatico
I Forum di Zeus News
Leggi la newsletter gratuita - Attiva il Menu compatto
 
 FAQFAQ   CercaCerca   Lista utentiLista utenti   GruppiGruppi   RegistratiRegistrati 
 ProfiloProfilo   Messaggi privatiMessaggi privati   Log inLog in 

    Newsletter RSS Facebook Twitter Contatti Ricerca
Errore "non rilevato" dal compilatore
Nuovo argomento   Rispondi    Indice del forum -> Programmazione
Precedente :: Successivo  
Autore Messaggio
capcla
Eroe
Eroe


Registrato: 08/04/10 16:49
Messaggi: 41

MessaggioInviato: 10 Mag 2011 23:54    Oggetto: Errore "non rilevato" dal compilatore Rispondi citando

Salve,
stavo cercando di copilare il file new1.c (che poi sarebbe un piccolo server) con gcc usando il seguente comando
Codice:
gcc new1.c -o server -lwsock32

In questo file c'è il seguente errore:
al posto di aver scritto
Codice:
strlen(messaggio)

ho scritto
Codice:
stlen(messaggio)
.
Il problema è che il compilatore gcc, in windows, lanciato con l'istruzione precedente da solo il seguente messaggio di errore:
Codice:
collect2: ld returned 1 exit status

mentre in linux dice anche di che errore si tratta (posterò una modifica in cui faccio vedere la differenza).
Come posso fare per var rilevare questo errore a windows? C'è qualche altra opzione che posso mettere in fase di compilazione?
Grazie

EDIT: questo è il risultato della compilazione in linux:
Codice:
gcc new1.c -o server
/tmp/ccIXbYEm.o: In function `main':
new1.c:(.text+0x264): undefined reference to `stlen'
collect2: ld returned 1 exit status

Come potete vedere, qui, a differenza che in windows, mi dice il tipo di errore che ho commesso e in che procedura si trova.
Voglio inoltre far notare come in questa riga di comando non c'è l'opzione -lwsock32 perché in linux non serve
Grazie
Top
Profilo Invia messaggio privato
freemind
Supervisor sezione Programmazione
Supervisor sezione Programmazione


Registrato: 04/04/07 20:28
Messaggi: 4643
Residenza: Internet

MessaggioInviato: 11 Mag 2011 09:48    Oggetto: Rispondi citando

Ma se su win ometti "-lwsock32" che succede?
Top
Profilo Invia messaggio privato
SverX
Supervisor Macchinisti
Supervisor Macchinisti


Registrato: 25/03/02 11:16
Messaggi: 10521
Residenza: Tokelau

MessaggioInviato: 11 Mag 2011 10:53    Oggetto: Rispondi citando

in effetti il compilatore non dovrebbe dare errore, eventualmente il linker lo darà se non troverà da nessuna parte la funzione richiesta... no?
Top
Profilo Invia messaggio privato HomePage
capcla
Eroe
Eroe


Registrato: 08/04/10 16:49
Messaggi: 41

MessaggioInviato: 11 Mag 2011 15:53    Oggetto: Rispondi citando

freemind ha scritto:
Ma se su win ometti "-lwsock32" che succede?

Succede che da comunque quel messaggio di errore ma nulla di più.
Comunque, wsock32 è una libreria di windows che serve per far funzionare i programmi come questo in rete (in linux non serve perché queste funzionalità dovrebbero essere attivate di default)

Mi sono appena accorto di una cosa "sconvolgente". Come ho detto fino ad ora, il gcc-mingw, restituiva quell'errore sia quando scrivevo male una funzione data dal c come strlen, sia quando non mettevo la wsock32.
La cosa che mi ha fatto strabuzzare gli occhi è la seguente: ho provato a compilare il file in macchina virtuale xp e mi escono gli errori che devono uscire!!!
Più tardi modifico il messaggio e vi mando un'immagine con tutto il codice di output perché è lungo.
A sto punto, che sia colpa del seven a 64 bit quando il mingw è a 32 bit?

EDIT
Eccolo qua: non ho avuto il bisogno di copiare l'immagine
Codice:
X:\>gcc new1.c -o server
C:\DOCUME~1\ADMINI~1\IMPOST~1\Temp\ccFcTINy.o:new1.c:(.text+0x1a): undefined ref
erence to `WSACleanup@0'
C:\DOCUME~1\ADMINI~1\IMPOST~1\Temp\ccFcTINy.o:new1.c:(.text+0x4e): undefined ref
erence to `WSAStartup@8'
C:\DOCUME~1\ADMINI~1\IMPOST~1\Temp\ccFcTINy.o:new1.c:(.text+0xad): undefined ref
erence to `socket@12'
C:\DOCUME~1\ADMINI~1\IMPOST~1\Temp\ccFcTINy.o:new1.c:(.text+0xfc): undefined ref
erence to `inet_addr@4'
C:\DOCUME~1\ADMINI~1\IMPOST~1\Temp\ccFcTINy.o:new1.c:(.text+0x110): undefined re
ference to `htons@4'
C:\DOCUME~1\ADMINI~1\IMPOST~1\Temp\ccFcTINy.o:new1.c:(.text+0x131): undefined re
ference to `bind@12'
C:\DOCUME~1\ADMINI~1\IMPOST~1\Temp\ccFcTINy.o:new1.c:(.text+0x14f): undefined re
ference to `closesocket@4'
C:\DOCUME~1\ADMINI~1\IMPOST~1\Temp\ccFcTINy.o:new1.c:(.text+0x16f): undefined re
ference to `listen@8'
C:\DOCUME~1\ADMINI~1\IMPOST~1\Temp\ccFcTINy.o:new1.c:(.text+0x192): undefined re
ference to `closesocket@4'
C:\DOCUME~1\ADMINI~1\IMPOST~1\Temp\ccFcTINy.o:new1.c:(.text+0x1c1): undefined re
ference to `accept@12'
C:\DOCUME~1\ADMINI~1\IMPOST~1\Temp\ccFcTINy.o:new1.c:(.text+0x1e9): undefined re
ference to `closesocket@4'
C:\DOCUME~1\ADMINI~1\IMPOST~1\Temp\ccFcTINy.o:new1.c:(.text+0x214): undefined re
ference to `gethostbyaddr@12'
C:\DOCUME~1\ADMINI~1\IMPOST~1\Temp\ccFcTINy.o:new1.c:(.text+0x22a): undefined re
ference to `inet_ntoa@4'
C:\DOCUME~1\ADMINI~1\IMPOST~1\Temp\ccFcTINy.o:new1.c:(.text+0x263): undefined re
ference to `recv@16'
C:\DOCUME~1\ADMINI~1\IMPOST~1\Temp\ccFcTINy.o:new1.c:(.text+0x28b): undefined re
ference to `closesocket@4'
C:\DOCUME~1\ADMINI~1\IMPOST~1\Temp\ccFcTINy.o:new1.c:(.text+0x2d5): undefined re
ference to `srtlen'
C:\DOCUME~1\ADMINI~1\IMPOST~1\Temp\ccFcTINy.o:new1.c:(.text+0x2f3): undefined re
ference to `send@16'
C:\DOCUME~1\ADMINI~1\IMPOST~1\Temp\ccFcTINy.o:new1.c:(.text+0x327): undefined re
ference to `closesocket@4'
C:\DOCUME~1\ADMINI~1\IMPOST~1\Temp\ccFcTINy.o:new1.c:(.text+0x33c): undefined re
ference to `closesocket@4'
collect2: ld returned 1 exit status

X:\>gcc new1.c -o server -lwsock32
C:\DOCUME~1\ADMINI~1\IMPOST~1\Temp\ccLnK9z7.o:new1.c:(.text+0x2d5): undefined re
ference to `srtlen'
collect2: ld returned 1 exit status

X:\>gcc new1.c -o server -lwsock32
C:\DOCUME~1\ADMINI~1\IMPOST~1\Temp\ccNBWH9n.o:new1.c:(.text+0x2d5): undefined re
ference to `stlen'
collect2: ld returned 1 exit status
Top
Profilo Invia messaggio privato
freemind
Supervisor sezione Programmazione
Supervisor sezione Programmazione


Registrato: 04/04/07 20:28
Messaggi: 4643
Residenza: Internet

MessaggioInviato: 11 Mag 2011 16:35    Oggetto: Rispondi citando

La libreria la conosco era solo per avere le stesse condizioni.
A questo punto potrebbe essere un bug gcc-mingw se fatto girare su una macchina a 64bit?
Non ha senso che un testo di output di un errore non venga visualizzato a meno che appunto non ci sia qualche rogna con il numero di bit che va a toccare la funzione che butta fuori gli errori...
Top
Profilo Invia messaggio privato
capcla
Eroe
Eroe


Registrato: 08/04/10 16:49
Messaggi: 41

MessaggioInviato: 11 Mag 2011 17:36    Oggetto: Rispondi citando

Volendo abilitare l'output di tutti gli errori, ho letto che dovrei utilizzare l'opzione -wall.
Ma come e dove va inserita nella linea di comando?
Vorrei includerla nella stringa per la compilazione in seven... non si sa mai
Top
Profilo Invia messaggio privato
capcla
Eroe
Eroe


Registrato: 08/04/10 16:49
Messaggi: 41

MessaggioInviato: 11 Mag 2011 22:01    Oggetto: Rispondi citando

capcla ha scritto:
Volendo abilitare l'output di tutti gli errori, ho letto che dovrei utilizzare l'opzione -wall.
Ma come e dove va inserita nella linea di comando?
Vorrei includerla nella stringa per la compilazione in seven... non si sa mai


Sbagliavo a scrivere l'opzione. era -Wall e non -wall solo che ora include anche errori di cui non mi frega niente come le variabili non usate Razz
Top
Profilo Invia messaggio privato
SverX
Supervisor Macchinisti
Supervisor Macchinisti


Registrato: 25/03/02 11:16
Messaggi: 10521
Residenza: Tokelau

MessaggioInviato: 12 Mag 2011 08:54    Oggetto: Rispondi citando

-Wall dovrebbe essere per visualizzare tutte le warning, gli errori dovrebbero comunque essere visualizzati.

personalmente ritengo che il problema non sia dovuto al sistema operativo o processore a 64 bit, ma in ogni modo non ho sufficiente competenza per darti una risposta certa al 100%. Diciamo che se includi librerie ovviamente non ti segnalerà la mancanza di una funzione finché non si raggiunge la fase di linking, altrimenti se non includi librerie allora può essere che si accorga già subito delle funzioni mancanti. E' però solo una mia ipotesi comunque...
Top
Profilo Invia messaggio privato HomePage
freemind
Supervisor sezione Programmazione
Supervisor sezione Programmazione


Registrato: 04/04/07 20:28
Messaggi: 4643
Residenza: Internet

MessaggioInviato: 12 Mag 2011 09:08    Oggetto: Rispondi

Il punto però SverX è che in ogni modo l'output di errore del mancato riferimento alla funzione dovrebbe esser buttato fuori.
Perchè l'architettura dovrebbe influire sull'output?
Se la funzione non c'è dovrebbe dirlo, se la funzione c'è ma la libreria non va bene, dovrebbe dirlo.
'Sta cosa è un po' strana...
Top
Profilo Invia messaggio privato
Mostra prima i messaggi di:   
Nuovo argomento   Rispondi    Indice del forum -> Programmazione Tutti i fusi orari sono GMT + 1 ora
Pagina 1 di 1

 
Vai a:  
Non puoi inserire nuovi argomenti
Non puoi rispondere a nessun argomento
Non puoi modificare i tuoi messaggi
Non puoi cancellare i tuoi messaggi
Non puoi votare nei sondaggi