Entra

View Full Version : problema a compilare "ciao mondo"


hardskin1
03-07-2003, 15:26
Salve,
stavo provando a compilare il classico "ciao mondo" in C. Non mi apettavo nessun problema, ma la shell mi vomita addosso questa brutta roba quando lancio gcc primo.c. Qualcuno sa cosa e' successo? La distro e' una debian sid, gcc3.3.1

In file included from primo.c:3:
/usr/lib/gcc-lib/i386-linux/3.3.1/include/stdio.h:37:23: features.h: No such file or directory
In file included from /usr/lib/gcc-lib/i386-linux/3.3.1/include/stdio.h:43, from primo.c:3:/usr/lib/gcc-lib/i386-linux/3.3.1/include/stddef.h:213: error: syntax error before "typedef"
/usr/lib/gcc-lib/i386-linux/3.3.1/include/stdio.h:45:25: bits/types.h: No such file or directory

riaw
03-07-2003, 17:15
Originally posted by "hardskin1"

Salve,
stavo provando a compilare il classico "ciao mondo" in C. Non mi apettavo nessun problema, ma la shell mi vomita addosso questa brutta roba quando lancio gcc primo.c. Qualcuno sa cosa e' successo? La distro e' una debian sid, gcc3.3.1

In file included from primo.c:3:
/usr/lib/gcc-lib/i386-linux/3.3.1/include/stdio.h:37:23: features.h: No such file or directory
In file included from /usr/lib/gcc-lib/i386-linux/3.3.1/include/stdio.h:43, from primo.c:3:/usr/lib/gcc-lib/i386-linux/3.3.1/include/stddef.h:213: error: syntax error before "typedef"
/usr/lib/gcc-lib/i386-linux/3.3.1/include/stdio.h:45:25: bits/types.h: No such file or directory


potresti provare a mettere qua il listato del programma? il sorgente insomma?
io avevo provato a scriverlo e funzionava perfettamente (ettecredo son 10 righe di codice :D) cmq la distro che usavo era mdk 9.1

ciao!

hardskin1
03-07-2003, 17:45
/* Primo programma in C */

#include<stdio.h>

main()
{
printf("ciao mondo\n");
return 0;

}

riaw
03-07-2003, 18:09
Originally posted by "hardskin1"

/* Primo programma in C */

#include<stdio.h>

*****************main()*******************

{
printf("ciao mondo\n");
return 0;

}

quello che ho evidenziato con gli asterischi, correggilo così:

int main(void)

e prova ;)


da quanto mi ricordo, devi mettere "int" per dirgli che la funzione (main) restituisce un valore intero (return 0).
void invece serve per dire al compilatore che la main non richiede parametri.
poi se si può scrivere solo main() invece che int main(void), questo non lo so...

Tadde
03-07-2003, 19:32
Forse ci vorrebbe uno spazio dopo "#include" , no?

hardskin1
03-07-2003, 19:46
ho provato tutte e due ma continua a darmi gli stessi errori :muro: :muro:

VICIUS
03-07-2003, 20:13
strano da me funziona.
hai installato le glibc-dev ?

Hrc211v
03-07-2003, 20:14
Io ho fatto cosi e va :

#include <stdio.h>

void main()


{
printf("Ciao mondo\n");
}



il file lo salvato come prova.c poi ho fatto
gcc prova.c -o prova

xfulviox
03-07-2003, 20:48
non credo sia corretto nel main un return(0), semmai exit(0)... e poi dopo include ci va lo spazio...

hardskin1
03-07-2003, 21:01
Regola dello pseudo-niubbo-programmatore:
prima di compilare un programma e rompere le palle ai ragazzi del forum di hwupgrade, assicurati di avere installate le librerie.

cdere
03-07-2003, 23:51
:rolleyes: :rolleyes: :rolleyes: :rolleyes:











dai, no problem ;)

LukA4e
04-07-2003, 13:18
prova a lasciare una riga vuota dopo la parentesi graffa finale.
Invece di return 0 prova a mettere:

system("PAUSE");


dopo dimmi ciao!

cn73
04-07-2003, 14:50
Originally posted by "LukA4e"

prova a lasciare una riga vuota dopo la parentesi graffa finale.
Invece di return 0 prova a mettere:

system("PAUSE");


dopo dimmi ciao!

Non hai capito...gli mancavano le librerie in /usr/include :rolleyes:

LukA4e
04-07-2003, 18:39
skusa non avevo letto tt le risposte.

Ciao!!

cicciolib
12-07-2003, 09:27
dove si trova il pacchetto delle glibc-dev su slackware 9 ??
ho il suo stesso problema, ma in usr/include è pieno di librerie! ci sono le gtk-1.2/gtk/gtk.h e le gtk-2.0/gtk/gtk.h

Ho provato a compilare questo ma non mi trova le librerie!

#include <gtk/gtk.h>

/* This is a callback function. The data arguments are ignored
* in this example. More on callbacks below. */
static void hello( GtkWidget *widget,
gpointer data )
{
g_print ("Hello World\n");
}

static gboolean delete_event( GtkWidget *widget,
GdkEvent *event,
gpointer data )
{
/* If you return FALSE in the "delete_event" signal handler,
* GTK will emit the "destroy" signal. Returning TRUE means
* you don't want the window to be destroyed.
* This is useful for popping up 'are you sure you want to quit?'
* type dialogs. */

g_print ("delete event occurred\n");

/* Change TRUE to FALSE and the main window will be destroyed with
* a "delete_event". */

return TRUE;
}

/* Another callback */
static void destroy( GtkWidget *widget,
gpointer data )
{
gtk_main_quit ();
}

int main( int argc,
char *argv[] )
{
/* GtkWidget is the storage type for widgets */
GtkWidget *window;
GtkWidget *button;

/* This is called in all GTK applications. Arguments are parsed
* from the command line and are returned to the application. */
gtk_init (&argc, &argv);

/* create a new window */
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);

/* When the window is given the "delete_event" signal (this is given
* by the window manager, usually by the "close" option, or on the
* titlebar), we ask it to call the delete_event () function
* as defined above. The data passed to the callback
* function is NULL and is ignored in the callback function. */
g_signal_connect (G_OBJECT (window), "delete_event",
G_CALLBACK (delete_event), NULL);

/* Here we connect the "destroy" event to a signal handler.
* This event occurs when we call gtk_widget_destroy() on the window,
* or if we return FALSE in the "delete_event" callback. */
g_signal_connect (G_OBJECT (window), "destroy",
G_CALLBACK (destroy), NULL);

/* Sets the border width of the window. */
gtk_container_set_border_width (GTK_CONTAINER (window), 10);

/* Creates a new button with the label "Hello World". */
button = gtk_button_new_with_label ("Hello World");

/* When the button receives the "clicked" signal, it will call the
* function hello() passing it NULL as its argument. The hello()
* function is defined above. */
g_signal_connect (G_OBJECT (button), "clicked",
G_CALLBACK (hello), NULL);

/* This will cause the window to be destroyed by calling
* gtk_widget_destroy(window) when "clicked". Again, the destroy
* signal could come from here, or the window manager. */
g_signal_connect_swapped (G_OBJECT (button), "clicked",
G_CALLBACK (gtk_widget_destroy),
G_OBJECT (window));

/* This packs the button into the window (a gtk container). */
gtk_container_add (GTK_CONTAINER (window), button);

/* The final step is to display this newly created widget. */
gtk_widget_show (button);

/* and the window */
gtk_widget_show (window);

/* All GTK applications must have a gtk_main(). Control ends here
* and waits for an event to occur (like a key press or
* mouse event). */
gtk_main ();

return 0;
}

cicciolib
12-07-2003, 10:16
i programmi compilano perfettamente, l'unica copsa è che non mi trova le gtk, e se nell'include gli metto il percorso reale di gtk.h poi mi da errore per tutti gli include con percorso errato che ci sono in gtk.h!!!!!!!!!!!1

COME GLI DICO DI PARTIRE A CERCARE DIRETTAMENTE DA /USR/INCLUDE/GTK-1.2 OLTRE CHE DA /USR/INCLUDE E BASTA?

DEVO FARE QUALCHE EXPORT ?

HollowMan
12-07-2003, 10:43
Ciao
anch'io ho avuto qualche problema a compilare dei programmi per Gnome 1 ... il fatto è che con il passaggio a Gnome 2 alcune librerie accessorie a gtk1.2 non sono state incluse;
Da qualche parte, non mi ricordo se su questo o un altro forum, ho scoperto che la soluzione consiste nell'installare un paio di librerie dal repository della slack 8.1; appena lo ritrovo posto i nomi dei pacchetti.

VICIUS
12-07-2003, 10:52
Originally posted by "cicciolib"

i programmi compilano perfettamente, l'unica copsa è che non mi trova le gtk, e se nell'include gli metto il percorso reale di gtk.h poi mi da errore per tutti gli include con percorso errato che ci sono in gtk.h!!!!!!!!!!!1

COME GLI DICO DI PARTIRE A CERCARE DIRETTAMENTE DA /USR/INCLUDE/GTK-1.2 OLTRE CHE DA /USR/INCLUDE E BASTA?

DEVO FARE QUALCHE EXPORT ?

prova con : gcc -I/la/dir/CHE/voglio/io

ciao ;)

cicciolib
12-07-2003, 11:20
ho fatto:

gcc -I/usr/include/gtk-1.2 hellogtk.c -o hellogtk

cosi facendo mi ha trovato gtk.h ma mi ha dato pagine di errori in quanto sono sbagliati i percorsi include dentro a gtk.h perché sono riferiti a tutti i file di gtk

guarda:

or storage class
/usr/include/gtk-1.2/gtk/gtkmenufactory.h:53: error: parse error before '}' token
/usr/include/gtk-1.2/gtk/gtkmenufactory.h:63: error: parse error before "gchar"
/usr/include/gtk-1.2/gtk/gtkmenufactory.h:63: warning: no semicolon at end of struct or union
/usr/include/gtk-1.2/gtk/gtkmenufactory.h:67: error: parse error before '*' token
/usr/include/gtk-1.2/gtk/gtkmenufactory.h:67: warning: data definition has no type or storage class
/usr/include/gtk-1.2/gtk/gtkmenufactory.h:68: error: parse error before '}' token
In file included from /usr/include/gtk-1.2/gtk/gtk.h:80,
from hellogtk.c:2:
/usr/include/gtk-1.2/gtk/gtkitemfactory.h:44: error: parse error before "func_data"
/usr/include/gtk-1.2/gtk/gtkitemfactory.h:46: error: parse error before '*' token
/usr/include/gtk-1.2/gtk/gtkitemfactory.h:46: error: parse error before '*' token
/usr/include/gtk-1.2/gtk/gtkitemfactory.h:47: warning: data definition has no type or storage class
/usr/include/gtk-1.2/gtk/gtkitemfactory.h:49: error: parse error before "callback_data"
/usr/include/gtk-1.2/gtk/gtkitemfactory.h:67: error: field `object' has incomplete type
/usr/include/gtk-1.2/gtk/gtkitemfactory.h:69: error: parse error before "gchar"
/usr/include/gtk-1.2/gtk/gtkitemfactory.h:69: warning: no semicolon at end of struct or union
/usr/include/gtk-1.2/gtk/gtkitemfactory.h:72: error: parse error before '*' token

per pagine e pagine!

pensa che ho compilato lmule e wxgtk senza problemi!

cicciolib
12-07-2003, 12:02
:mc: brancolo nel buio!!! :confused: :cry:

Mason
12-07-2003, 12:15
gcc -I /usr/include/gtk-1.2/ -I /usr/include/glib-1.2/ -I usr/lib/glib/include/ -lgtk -lgdk prova.c

con questa riga ho fatto miglioramenti, per lo meno compila
da errori di linker
non so che librerie linkare ancora,cmq e un passo avanti.

cmq mi pare inpossibile che in qualche tutorial per gtk non diano un riga per compilare un programma in gtk

:wq

cicciolib
12-07-2003, 12:33
mi da ancora molti errori, trova gtk.h e poi non trova piu nulla! a questo punto ricompilo!!!!

ma cosa? che casino!!! sembra che i programmi nei loro configure esportino qualche variabile ignota che faccia andare tutto!

Mason
12-07-2003, 13:40
mumble

i programmi non esportano variabili al di fuori del proprio ciclo di vita ed e cmq impossibile accedere a aree dati di un altro processo,a meno che sia un ...boh,non ricordo piu il nome,un area file mappato in memoria, tramite ma mmap mi pare ma nn ci gioco le palle.
al max ritornano valori o settano variabili ambiente(mumble, dovrebbe essere la chiamata setenv).

ma si impalla in compilazione o al linker?

a me da sto msg con il cmd detto sopra:

[mason@master mason]$ gcc -I /usr/include/gtk-1.2/ -I /usr/include/glib-1.2/ -I /usr/lib/glib/include/ -lgtk -lgdk prova.c
/tmp/cc9rAMl0.o: In function `main':
/tmp/cc9rAMl0.o(.text+0x82): undefined reference to `G_CALLBACK'
/tmp/cc9rAMl0.o(.text+0x93): undefined reference to `G_OBJECT'
/tmp/cc9rAMl0.o(.text+0x9c): undefined reference to `g_signal_connect'
/tmp/cc9rAMl0.o(.text+0xae): undefined reference to `G_CALLBACK'
/tmp/cc9rAMl0.o(.text+0xbf): undefined reference to `G_OBJECT'
/tmp/cc9rAMl0.o(.text+0xc8): undefined reference to `g_signal_connect'
/tmp/cc9rAMl0.o(.text+0x115): undefined reference to `G_CALLBACK'
/tmp/cc9rAMl0.o(.text+0x126): undefined reference to `G_OBJECT'
/tmp/cc9rAMl0.o(.text+0x12f): undefined reference to `g_signal_connect'
/tmp/cc9rAMl0.o(.text+0x13d): undefined reference to `G_OBJECT'
/tmp/cc9rAMl0.o(.text+0x14e): undefined reference to `G_CALLBACK'
/tmp/cc9rAMl0.o(.text+0x15f): undefined reference to `G_OBJECT'
/tmp/cc9rAMl0.o(.text+0x168): undefined reference to `g_signal_connect_swapped'
collect2: ld returned 1 exit status

tieni conto che per arrivare a qusto ho proceduto cosi:

gcc prova.c

nelle prime linee msg errori mi dice manca gtk.h

locate gtk.h

lo aggiungo con l'opzione -I(i maiuscola) al gcc
procedo cosi fin quando trova tutti gli header(mi pare strano non li includa lui di default).

poi una volta che da errori di linker(tipo quello sopra) dichiaro di usare determinate librerie con l'opzione -l (elle minuscola).

tieni conto che gli include dipendono da sistema a sistema e sii sicuro di avere almeno i file gtk.h glib.h glibconfig.h (usa il locate per verificare o il find).

tutti gli oggetti sopra definiti di cui il linker nn trova il valore nn so proprio dove li hai presi

Mason
12-07-2003, 14:01
k trovato nei doc di gtk:

cc `pkg-config --cflags --libs gtk+-2.0` hello.c -o hello

o anche col gcc

gcc `pkg-config --cflags --libs gtk+-2.0` hello.c -o hello

per capire prova da soli i cmd:

pkg-config --cflags gtk+-2.0

pkg-config --libs gtk+-2.0

mjordan
12-07-2003, 17:14
Originally posted by "VICIUS"



prova con : gcc -I/la/dir/CHE/voglio/io

ciao ;)

Devi compilare il sorgente con il seguente comando:
gcc -Wall -g 'gtk-config --cflags --libs' -o main main.c

Questo se usi le GTK+ 1.2.x

Se usi le 2.x al posto di gtk-config devi usare pkg-config con la stessa sintassi. Ricorda che pkg-config o gtk-config devono essere racchiusi fra apici rovesciati.

mjordan
12-07-2003, 17:18
Originally posted by "cn73"



Non hai capito...gli mancavano le librerie in /usr/include :rolleyes:

Non gli manca nessuna libreria.
La versione 3.3.1 del compilatore GNU (a me è successo con RedHat 9.0) non sistema bene i suoi header dopo l'installazione. Dovresti creare dei link simbolici per fargli vedere dalle locazioni standard in cui cerca quei benedetti header. Io ho risolto con questo problema, ma bada che il kernel con la versione 3.3.x non compila.

VICIUS
12-07-2003, 17:20
Originally posted by "mjordan"



Devi compilare il sorgente con il seguente comando:
gcc -Wall -g 'gtk-config --cflags --libs' -o main main.c

Questo se usi le GTK+ 1.2.x

Se usi le 2.x al posto di gtk-config devi usare pkg-config con la stessa sintassi. Ricorda che pkg-config o gtk-config devono essere racchiusi fra apici rovesciati.

sbagliato a quotare ??

ciao ;)

VICIUS
12-07-2003, 17:26
Originally posted by "mjordan"

...
ma bada che il kernel con la versione 3.3.x non compila.

questo non è del tutto vero. io ci sono riuscito senza alcun problema. so che ad alcuni da problemi ma a me non è mai capitato.

Linux version 2.4.21-ac4 (root@caspar) (gcc version 3.3.1 20030626 (Debian prerelease)) #3 mer lug 2 20:33:50 CEST 2003

ciao ;)

mjordan
12-07-2003, 17:43
Originally posted by "VICIUS"



questo non è del tutto vero. io ci sono riuscito senza alcun problema. so che ad alcuni da problemi ma a me non è mai capitato.

Linux version 2.4.21-ac4 (root@caspar) (gcc version 3.3.1 20030626 (Debian prerelease)) #3 mer lug 2 20:33:50 CEST 2003

ciao ;)

Io parlavo di kernel, non kernel AC ;)

cicciolib
12-07-2003, 18:29
Originally posted by "Mason"

k trovato nei doc di gtk:

cc `pkg-config --cflags --libs gtk+-2.0` hello.c -o hello

o anche col gcc

gcc `pkg-config --cflags --libs gtk+-2.0` hello.c -o hello

per capire prova da soli i cmd:

pkg-config --cflags gtk+-2.0

pkg-config --libs gtk+-2.0

Ci sono riuscito grazie mille!!! ora compila che è un piacere!

cicciolib
12-07-2003, 19:51
Come si fa a compilare i file header ? tipo quello dell'esempio gtkdial http://www.gtk.org/tutorial/sec-gtkdial.html ????

mi dice gcc: compilation of header file requested
;)

mjordan
12-07-2003, 19:56
Originally posted by "cicciolib"

Come si fa a compilare i file header ? tipo quello dell'esempio gtkdial http://www.gtk.org/tutorial/sec-gtkdial.html ????

mi dice gcc: compilation of header file requested
;)

Non devi compilare l'header, devi imparare il C :D

Compila con in aggiunta il parametro -D__GTK_DIAL_H__

cicciolib
12-07-2003, 20:16
Originally posted by "mjordan"



Non devi compilare l'header, devi imparare il C :D

Compila con in aggiunta il parametro -D__GTK_DIAL_H__

Infatti sto cominciando adesso, java lo so ma il C ........beh..... :mc:

mjordan
12-07-2003, 20:55
Originally posted by "cicciolib"



Infatti sto cominciando adesso, java lo so ma il C ........beh..... :mc:

Che poi ti ho detto una minkiata, perchè definendo quella costante che ti ho detto l'header non viene inluso.

Comunque prova questo comando per compilare il tutto (assumendo che hai i tre files nella dir dove compili):

gcc 'pkg-config --cflags --libs gtk+-2.0' -o dial_test gtkdial.c dial_test.c

Comunque usare subito programmi GTK+ non è il massimo della vita per imparare il C.