Precedente :: Successivo |
Autore |
Messaggio |
capcla Eroe
Registrato: 08/04/10 16:49 Messaggi: 41
|
Inviato: 10 Mag 2011 23:54 Oggetto: Errore "non rilevato" dal compilatore |
|
|
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
.
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 |
|
|
freemind Supervisor sezione Programmazione
Registrato: 04/04/07 20:28 Messaggi: 4643 Residenza: Internet
|
Inviato: 11 Mag 2011 09:48 Oggetto: |
|
|
Ma se su win ometti "-lwsock32" che succede? |
|
Top |
|
|
SverX Supervisor Macchinisti
Registrato: 25/03/02 11:16 Messaggi: 11566 Residenza: Tokelau
|
Inviato: 11 Mag 2011 10:53 Oggetto: |
|
|
in effetti il compilatore non dovrebbe dare errore, eventualmente il linker lo darà se non troverà da nessuna parte la funzione richiesta... no? |
|
Top |
|
|
capcla Eroe
Registrato: 08/04/10 16:49 Messaggi: 41
|
Inviato: 11 Mag 2011 15:53 Oggetto: |
|
|
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 |
|
|
freemind Supervisor sezione Programmazione
Registrato: 04/04/07 20:28 Messaggi: 4643 Residenza: Internet
|
Inviato: 11 Mag 2011 16:35 Oggetto: |
|
|
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 |
|
|
capcla Eroe
Registrato: 08/04/10 16:49 Messaggi: 41
|
Inviato: 11 Mag 2011 17:36 Oggetto: |
|
|
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 |
|
|
capcla Eroe
Registrato: 08/04/10 16:49 Messaggi: 41
|
Inviato: 11 Mag 2011 22:01 Oggetto: |
|
|
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 |
|
Top |
|
|
SverX Supervisor Macchinisti
Registrato: 25/03/02 11:16 Messaggi: 11566 Residenza: Tokelau
|
Inviato: 12 Mag 2011 08:54 Oggetto: |
|
|
-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 |
|
|
freemind Supervisor sezione Programmazione
Registrato: 04/04/07 20:28 Messaggi: 4643 Residenza: Internet
|
Inviato: 12 Mag 2011 09:08 Oggetto: |
|
|
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 |
|
|
|