Discussione:
codeblocks non compila
(troppo vecchio per rispondere)
Angelo
2011-10-27 21:02:26 UTC
Permalink
sperimentando code::blocks
ho provato a compilare
questo semplicissimo
programmino:

/* esempio utilizzo di gets e putchar */

#include<stdio.h>

int main()

{
char c, frase[80];
int i=0;

puts("inserire una frase: ");
while ((c=getchar())!='\n')
frase[i++]=c;

frase[i]='\0';
puts("La frase digitata e': ");
puts(frase);

return 0;

}

ottenendo questo log

Compiling: C:\Users\Angelo\codeblocks\gets.c
Linking console executable: C:\Users\Angelo\codeblocks\gets.exe
Execution of 'mingw32-g++.exe -o C:\Users\Angelo\codeblocks\gets.exe
C:\Users\Angelo\codeblocks\gets.o' in 'C:\Users\Angelo' failed.
Nothing to be done.


Invece con devccp me lo compila normalmente
anche xemacs lo compila con:

gcc -o program program.c

Come mai????
pozz
2011-10-28 16:50:11 UTC
Permalink
Post by Angelo
ottenendo questo log
Compiling: C:\Users\Angelo\codeblocks\gets.c
Linking console executable: C:\Users\Angelo\codeblocks\gets.exe
Execution of 'mingw32-g++.exe -o C:\Users\Angelo\codeblocks\gets.exe
C:\Users\Angelo\codeblocks\gets.o' in 'C:\Users\Angelo' failed.
Nothing to be done.
Immagino tu abbia installato Code::Blocks con il compilatore mingw incluso.

Dai messaggi sembra che il compilatore abbia funzionato, infatti non dà
errori. E' l'operazione di linking che sembra fallita, ma la sintassi
del comando sembra corretta. Forse non trova l'eseguibile del linker,
anche se dovrebbe essere lo stesso del compilatore.

Prova a farti visualizzare maggiori dettagli andando nella finestra
Settings->Compiler and debugger, Other Settings e selezionando "Full
command line" all'opzione Compiler logging.
Post by Angelo
Invece con devccp me lo compila normalmente
gcc -o program program.c
Come mai????
Anche io riesco a compilarlo utilizzando Code::Blocks. Tieni presente
che non è l'IDE (Code::Blocks) a compilare, ma il compilatore. Il tuo
programma è corretto, quindi il compilatore dovrebbe compilarlo. E'
molto probabile che C::B non riesca a lanciare il linker, anche se è strano.
Angelo
2011-10-28 20:47:12 UTC
Permalink
Post by pozz
Immagino tu abbia installato Code::Blocks con il compilatore mingw incluso.
si
Post by pozz
Prova a farti visualizzare maggiori dettagli andando nella finestra
Settings->Compiler and debugger, Other Settings e selezionando "Full
command line" all'opzione Compiler logging.
ok l'ho fatto!
Post by pozz
Anche io riesco a compilarlo utilizzando Code::Blocks. Tieni presente
che non è l'IDE (Code::Blocks) a compilare, ma il compilatore. Il tuo
programma è corretto, quindi il compilatore dovrebbe compilarlo. E'
molto probabile che C::B non riesca a lanciare il linker, anche se è strano.
Ti posto i parametri di tutti i compilatori mingw "manuale"

gcc -o gets gets.c

E compila correttamente.
Devccp invece automaticamente usa:

gcc.exe "C:\Users\Angelo\gets.c" -o "C:\Users\Angelo\gets.exe"

E anche lui ok!

Code::blocks:

mingw32-gcc.exe -c C:\Users\Angelo\gets.c -o C:\Users\Angelo\gets.o
mingw32-g++.exe -o C:\Users\Angelo\gets.exe C:\Users\Angelo\gets.o

E fin qui ok! Dopodiche':

Execution of 'mingw32-g++.exe -o C:\Users\Angelo\gets.exe
C:\Users\Angelo\gets.o'

in 'C:\ProgramData\Microsoft\Windows\Start Menu\Programs\CodeBlocks'
failed.
Nothing to be done.

E qui toppa.
Andrea D'Amore
2011-10-29 07:21:54 UTC
Permalink
Post by Angelo
mingw32-gcc.exe -c C:\Users\Angelo\gets.c -o C:\Users\Angelo\gets.o
mingw32-g++.exe -o C:\Users\Angelo\gets.exe C:\Users\Angelo\gets.o
È strano, prova a lanciare tu a mano mingw32-gcc.exe facendogli produrre
l'eseguibile invece che il il file oggetto.
Angelo
2011-10-29 09:10:53 UTC
Permalink
Post by Andrea D'Amore
È strano, prova a lanciare tu a mano mingw32-gcc.exe facendogli produrre
l'eseguibile invece che il il file oggetto.
Si cosi funziona ........
Mi chiedo pero che differenza c'e' tra:

gcc.exe e mingw32-gcc.exe

e perche' code::blocks crei il file oggetto
pozz
2011-10-31 07:35:16 UTC
Permalink
Post by Angelo
Post by Andrea D'Amore
È strano, prova a lanciare tu a mano mingw32-gcc.exe facendogli produrre
l'eseguibile invece che il il file oggetto.
Si cosi funziona ........
gcc.exe e mingw32-gcc.exe
In linux si fa largo uso di link a file che non occupano molto spazio
nel filesystem e permettono di richiamare un eseguibile utilizzando vari
nomi. In Windows non esiste un sistema simile, quindi vengono
utilizzati vari file identici (che occupano anche spazio). Nella
directory bin del compilatore mingw troverai (o almeno questo è quello
che ho trovato io) addirittura tre eseguibili identici:

gcc.exe
mingw32-gcc.exe
mingw32-gcc-4.4.1.exe

Nella configurazione del compilatore in C::B (solita finestra
Settings->Compiler and debugger settings) puoi indicare quali sono i
vari eseguibili della toolchain (C compiler, C++ compiler, linker, ...).
Quando installi C::B viene utilizzato l'eseguibile mingw32-gcc.exe
come C compiler, niente di strano.
Post by Angelo
e perche' code::blocks crei il file oggetto
E' normale ed è la procedura standard. Ogni file sorgente viene
compilato in un file oggetto (opzione -c) e poi i file oggetti vengono
tra loro linkati, insieme ad eventuali librerie, in un file eseguibile.
Chiaramente se il tuo programma è formato da un solo file sorgente, la
procedura può sembrare sovrabbondante, ma non lo è affatto (utilizzare
il compilatore su un unico file sorgente per creare un eseguibile
prevede comunque l'utilizzo del linker).
Angelo
2011-10-31 20:14:56 UTC
Permalink
Post by pozz
Chiaramente se il tuo programma è formato da un solo file sorgente, la
procedura può sembrare sovrabbondante, ma non lo è affatto (utilizzare
il compilatore su un unico file sorgente per creare un eseguibile
prevede comunque l'utilizzo del linker).
grazie della spiegazione. :-)
Lorenzo Beretta
2011-11-01 15:47:01 UTC
Permalink
Post by pozz
Post by Angelo
Post by Andrea D'Amore
È strano, prova a lanciare tu a mano mingw32-gcc.exe facendogli produrre
l'eseguibile invece che il il file oggetto.
Si cosi funziona ........
gcc.exe e mingw32-gcc.exe
In linux si fa largo uso di link a file che non occupano molto spazio
nel filesystem e permettono di richiamare un eseguibile utilizzando vari
nomi. In Windows non esiste un sistema simile, quindi vengono utilizzati
vari file identici (che occupano anche spazio). Nella directory bin del
compilatore mingw troverai (o almeno questo è quello che ho trovato io)
Non che sia un fan di windows, ma almeno in teoria i link simbolici ci
sono usando ntfs.
Dico "in teoria" perchè per esserci ci sono (ho provato su windows XP),
ma a differenza che su unix non ricordo di averne mai visto uno.
O magari non ci ho ho mai fatto caso :)

Loading...