PDA

View Full Version : [c] su linux


gorten
25-03-2007, 15:31
ciao a tutti, mi sono affacciato da pochissimo su linux e quindi molto niubbo. Ho installato ubuntu come macchina virtuale su VmWare. Avvio e prendo un programma in c molto semplice per prendere confidenza con questo nuovo SO. Il programmino è molto semplice: fa una fork e poi da 2 msg a video x il padre e per il figlio.
Il problema appare quando cerco di compilare poichè gcc non mi riconosce le librerie. Cosa devo fare?

inserisco il programmino che voglio lanciare e le segnalazioni d'errore:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>


int main()
{
pid_t Pid;
int stat_val;

Pid=fork();
switch (Pid) {
case -1:
fprintf(stderr, "fork failed\n");
return(1);
case 0: /* Child */
printf("\nSono il figlio......");
sleep(3);
exit(0);
break;
}

waitpid(Pid,(int *)0,0);
printf("\nSono il padre......");
return(0);
}


e gli errori:

got@virtual-ubuntu:~/Desktop$ gcc -o es5 es5.c

es5.c:9:20: error: stdio.h: No such file or directory
es5.c:10:20: error: stdlib.h: No such file or directory
es5.c:11:20: error: unistd.h: No such file or directory
es5.c:12:20: error: string.h: No such file or directory
es5.c:13:23: error: sys/types.h: No such file or directory
es5.c:14:22: error: sys/stat.h: No such file or directory
es5.c:15:19: error: fcntl.h: No such file or directory
es5.c: In function ‘main’:
es5.c:22: error: ‘pid_t’ undeclared (first use in this function)
es5.c:22: error: (Each undeclared identifier is reported only once
es5.c:22: error: for each function it appears in.)
es5.c:22: error: expected ‘;’ before ‘Pid’
es5.c:25: error: ‘Pid’ undeclared (first use in this function)
es5.c:28: warning: incompatible implicit declaration of built-in function ‘fprintf’
es5.c:28: error: ‘stderr’ undeclared (first use in this function)
es5.c:31: warning: incompatible implicit declaration of built-in function ‘printf’
es5.c:33: warning: incompatible implicit declaration of built-in function ‘exit’
es5.c:40: warning: incompatible implicit declaration of built-in function ‘printf’
got@virtual-ubuntu:~/Desktop$

k0nt3
25-03-2007, 15:40
installa build-essential da synaptic ;) contiene tutte le librerie più comuni

gorten
25-03-2007, 16:21
quando seleziono il build-essential da synaptic mi dice che x installarlo ci sono dei pacchetti collegati da installare come g++ e dpkg-dev. Li ho marcati tutti e poi li ho installati (almeno credo) ma col complatore gcc non è cambiato nulla. Come posso vedere se ho installato correttamente? Grazie mille

k0nt3
25-03-2007, 16:31
quando seleziono il build-essential da synaptic mi dice che x installarlo ci sono dei pacchetti collegati da installare come g++ e dpkg-dev. Li ho marcati tutti e poi li ho installati (almeno credo) ma col complatore gcc non è cambiato nulla. Come posso vedere se ho installato correttamente? Grazie mille
no tu non devi marcarli! lo fa da solo synaptic... dopo che hai installato quel pacchetto deve funzionare la compilazione

gorten
25-03-2007, 16:40
ok, non so cosa avessi fatto prima, ho provato a ricercare build-essential e l'ho installato ed è partita l'installazione anche del resto collegato. ho provato a compilare ore il file c ed ho ottenuto finalmente l'eseguibile. Per lanciarlo non è sufficiente digitare il nome eseguibile seguito da invio? la shell mi risponde con command not found?!?

k0nt3
25-03-2007, 16:43
ok, non so cosa avessi fatto prima, ho provato a ricercare build-essential e l'ho installato ed è partita l'installazione anche del resto collegato. ho provato a compilare ore il file c ed ho ottenuto finalmente l'eseguibile. Per lanciarlo non è sufficiente digitare il nome eseguibile seguito da invio? la shell mi risponde con command not found?!?
devi usare ./nomeeseguibile questo perchè se non specifici la directory dove è l'eseguibile la shell lo cerca nelle cartelle predefinite (/bin, /usr/bin ect...) e non nella cartella corrente (che si indica con ./ ). è solo per evitare alcuni trucchetti che potrebbero utilizzare alcuni malware per essere eseguiti (ad es. un virus potrebbe chiamarsi ls e a quel punto quando esegui ls in quella cartella in realtà esegui il virus :fagiano: ). questo giusto per giustificare la cosa :)

fsdfdsddijsdfsdfo
25-03-2007, 16:47
ok, non so cosa avessi fatto prima, ho provato a ricercare build-essential e l'ho installato ed è partita l'installazione anche del resto collegato. ho provato a compilare ore il file c ed ho ottenuto finalmente l'eseguibile. Per lanciarlo non è sufficiente digitare il nome eseguibile seguito da invio? la shell mi risponde con command not found?!?

Un consiglio:
Studiati le opzioni di gcc e gdb che sono strumenti potentissimi.


E, soprattutto all'inzio, compila sempre usando

gcc -ansi -Wall -pedantic


Che sennò ti porti dietro le cattive abitudini di Win

gorten
25-03-2007, 16:52
me le andrò a guardare.

intanto grazie mille x l'aiuto.

k0nt3
25-03-2007, 16:54
me le andrò a guardare.

intanto grazie mille x l'aiuto.
immagino che hai già conosciuto le pagine man... in caso contrario dai un'occhiata a "man man" :read:

gorten
25-03-2007, 17:04
si si, ci andro':)

71104
25-03-2007, 20:04
E, soprattutto all'inzio, compila sempre usando

gcc -ansi -Wall -pedantic


Che sennò ti porti dietro le cattive abitudini di Win è un'idiozia usare il C89 quando esiste il C99 o anche il C++. Microsoft ha fatto bene a realizzare a suo tempo delle estensioni del C che somigliano molto alle novità introdotte dal C99; ha fatto anche male però a non supportare il C99 vero e proprio. come opzioni di compilazione per compilare files .c io consiglio semplicemente -std=c99; o, meglio ancora, compilare direttamente files .cpp/.cxx :P

The Incredible
28-04-2007, 16:51
scusa ma questo esercizio mi ricorda molto i miei esercizi di sistemi operativi 2 che sto facendo ora all'uni..
grazie al consiglio delle build essenzial sono riuscito a compilare..
domanda all'università mi sembra che dando man per funzioni come fork ect mi dia il manuale mentre qua a casa avendo ubuntu e installazione semi default non funziona.
ho installato con synapt gcc-doc pensavo fossero quelli da installare ma non mi dà nessun man di funzioni c.
avete qualche consiglio?
grazie

k0nt3
28-04-2007, 17:48
scusa ma questo esercizio mi ricorda molto i miei esercizi di sistemi operativi 2 che sto facendo ora all'uni..
grazie al consiglio delle build essenzial sono riuscito a compilare..
domanda all'università mi sembra che dando man per funzioni come fork ect mi dia il manuale mentre qua a casa avendo ubuntu e installazione semi default non funziona.
ho installato con synapt gcc-doc pensavo fossero quelli da installare ma non mi dà nessun man di funzioni c.
avete qualche consiglio?
grazie
cerca manpages! :)

cionci
28-04-2007, 17:51
Per installare le manpage della libreria standard installa il pacchetto manpages-dev da synaptic...

The Incredible
28-04-2007, 18:00
grazie mille mi hai risposto anche di là e ho risolto.

cionci
28-04-2007, 18:03
Lo dicevo anche per gorten ;)
Edit: azz, ho visto solo ora che il thread era vecchio :stordita: