[Risolto] Eclipse e C/C++

Vorrei usare Eclipse per programmare in C
Allora… Per spiegare le cose per bene andiamo con ordine…

Apriamo Eclipse, ci posizionaiamo sulla colonna Project Explorer
Clic col destro, new, C project
Project type: executable > empty project > Cross GCC

Poi creo la cartella src e ci creo un file test.c
Creo un semplice programma hello world e poi quando vado a compilare mi da

Launch failed. Binary not found

Sapreste dirmi che cosa non va? Se faccio un progetto sample hello world lo compila, però vedo che nel progetto di prova ci sono alcune cartelle in più, tipo di debug ed altre cose.

Cross GCC indica che vuoi compilare con una versione del gcc diversa da quella attualmente in uso.

Fa la stessa cosa anche con Linux GCC

[quote]
Se faccio un progetto sample hello world lo compila[/quote]

Queste due frasi mi sembrano incoerenti (stiamo parlando dello stesso hello world in entrambi i casi). Compila o non compila?

Quando fai creare l’ “hello world” ad Eclipse, prima fai build (icona a forma di martello) e poi fai run (icona verde con dentro il simbolo di play). Se fai subito play da errore.
Stessa cosa per un progetto vuoto: prima build e poi run … ovviamente prima crea il tuo sorgente con dentro il main.

Premendo il martello…

[code]**** Build of configuration Release for project asd ****

**** Internal Builder is used for build ****
Nothing to build for asd[/code]

Poi hai fatto run? Dava lo stesso errore di prima?
Nel progetto si è creata la voce “Binaries”? La voce “Debug”?

Rifaccio tutto da capo…

Build:

[code]**** Build of configuration Debug for project test_serio ****

make all
Building file: …/src/programma.c
Invoking: GCC C Compiler
gcc -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"src/programma.d" -MT"src/programma.d" -o"src/programma.o" “…/src/programma.c”
Finished building: …/src/programma.c

Building target: test_serio
Invoking: GCC C Linker
gcc -o"test_serio" ./src/programma.o
/usr/lib/gcc/x86_64-redhat-linux/4.5.1/…/…/…/…/lib64/crt1.o: In function _start': (.text+0x20): undefined reference to main’
collect2: ld returned 1 exit status
make: *** [test_serio] Errore 1[/code]

Si è creata la cartella Debug, ma non quella Binaries, infatti poi quando vado a fare run esce fuori sempre lo stesso errore.

(.text+0x20): undefined reference to `main

hai creato una funzione main con la sintassi corretta?

#include <stdio.h> /*per usare printf*/
int main(int argc, char **argv)
{
    /*il tuo codice*/
    printf("Ciao Mondo!!");
    return 0;
}

Con il tuo codice:

[code]**** Build of configuration Debug for project test ****

make all
Building file: …/src/programma.c
Invoking: GCC C Compiler
gcc -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"src/programma.d" -MT"src/programma.d" -o"src/programma.o" “…/src/programma.c”
Finished building: …/src/programma.c

Building target: test
Invoking: GCC C Linker
gcc -o"test" ./src/programma.o
/usr/lib/gcc/x86_64-redhat-linux/4.5.1/…/…/…/…/lib64/crt1.o: In function _start': (.text+0x20): undefined reference to main’
collect2: ld returned 1 exit status
make: *** [test] Errore 1[/code]

Quello è l’errore che viene dato quando il main non è scritto ma lui si aspetta che ve ne sia uno, se è generato anche in altre situazioni particolari … non lo so :-S

Tornando indietro un attimo indietro

Questo a cui ti riferisci è l’hello world creato da eclipse? Funziona? compila e si esegue? Se sì, prova a vedere che differenze ha con il tuo progetto fatto da zero.

Le differenze sono nella presenza della cartella Binaries e Debug sin dall’inizio. Anche se uso quel codice nel mio progetto, il programma poi non gira.

Binaries e Debug vengono creati quando il Build è completato con successo.

Domanda che può sembrare stupida, ma in realtà io per primo di dimentico: hai salvato? Altrimenti Build usa l’ultima versione salvata e non quella modificata.

[quote=fenomeno]
Binaries e Debug vengono creati quando il Build è completato con successo.

Domanda che può sembrare stupida, ma in realtà io per primo di dimentico: hai salvato? Altrimenti Build usa l’ultima versione salvata e non quella modificata.[/quote]
E che diamine, adesso funziona! Ma dico io, è mai possibile che agli sviluppatori di Eclipse non sia mai venuto in mente che esiste questo problema???’

Vorrei anche segnalare che quando clicchi sul martello bisogna selezionare relase e non debug

quello dipende dalla configurazione del progetto che vuoi usare: debug, release, o altre che puoi aggiungere tu