Δημοσιεύτηκε: 25 Οκτ 2008, 21:13
thodoris_turtle έγραψε:cyberpython έγραψε:Αν έκανες σωστά την εγκατάσταση, ανοίγεις ένα τερματικό και δίνεις την εντολή (αν π.χ. θες να κάνεις compile το αρχείο /home/cyberpython/programming/hello_world.c):
- Κώδικας: Επιλογή όλων
cd /home/cyberpython/programming
gcc hello_world.c -o hello_world.bin
(με την πρώτη εντολή πας στο φάκελο που έχεις αποθηκεύσει τον κώδικά σου)
και θα δημιουργηθεί το αρχείο hello_world.bin, που το εκτελείς με:
- Κώδικας: Επιλογή όλων
./hello_world.bin
ενα εναλλακτικο σεναριο θα ηταν make ονομα αρχειου
και μετα ./ονομα αρχειου
δηλ. εγω αντι να χρησιμοποιω το gcc χρησιμοποιω την εντολη make
δηλ. νομιζω με τον τροπο που ειπα ειναι πιο ευκολο να θυμασε make filename σε σχεση με το να θυμασε την συνταξη για το gcc
edit:
- Κώδικας: Επιλογή όλων
#include<stdio.h>
int recfun(int n);
int main()
{
int plithos,i;
printf("Dose to plithos tis akolouthias fibonacci:");
scanf("%d",&plithos);
for(i=0;i<plithos;i++)
printf("%d oros akolouthios fibonacci einai %d:",i,recfun(i));
return (0);
}
int recfun(int n)
{
int oros;
if(n==1)
oros=0;
else if (n==2)
oros=1;
else
oros=recfun(n-1)+recfun(n-2);
return(oros);
}
κανω make programma2
μετα ./ programma2
μετα μου λεει να δωσω το πληθος το δινω και μετα μου εμφανιζει segmentation fault
γιατι αυτο? τι πρεπει να κανω καμια ιδεα?
Μπορείς να χρησιμοποιήσεις τον debugger gdb για να πάρεις περισσότερες πληροφορίες για το σφάλμα.
Διαφορετικά, βάλε αρκετές εντολές printf() σε διάφορα σημεία του κώδικα για να παρακολουθήσεις το πως εκτελείται.
Για debugger,
1. Εγκατέστησε το πακέτο gdb
2. Μεταγλώττισε ξανά το αρχείο, τώρα με επιλογή να μπουν οδηγίες εκσφαλμάτωσης,
- Κώδικας: Επιλογή όλων
gcc -g programma2.c -o programma2
3. Εκτέλεσε το πρόγραμμα μέσα από το debugger,
- Κώδικας: Επιλογή όλων
gdb ./programma2
4. Στην προτροπή του gdm, γράφεις run και πατάς Εντερ.
5. Δίνεις νούμερο για το πρόγραμμα και πατάς Έντερ
6. Το πρόγραμμα καταρρέει, και δείχνει και τον κώδικα στη γραμμή με το σφάλμα.
7. Με την εντολή where μπορείς να δεις όλες τις κλήσεις συναρτήσεων στο πρόγραμμά σου. Γιατί βλέπεις τις γραμμές που θα δεις;
thodoris_turtle έγραψε:να ρωτησω και κατι αλλο? το gcc ειναι compiler για C ετσι δεν ειναι? ενω το g++ ειναι συνωλο απο compilers ετσι δεν ειναι ? δηλ. το g++ περιλαμβανει τον c compliler δηλ. τον gcc , τον c++ compliler αυτον δεν τον θυμαμε
ετσι δεν ειναι ? σωστα τα λεω?
Το GCC είναι το συνολικό έργο για μεταγλωττιστές του Free Software Foundation.
Ένας μεταγλωττιστής αποτελείται από ένα front-end (το κομμάτι που μετατρέπει τον πηγαίο κώδικα μιας γλώσσας προγραμματισμού σε μια ενδιάμεση γενική μορφή κώδικα) και ένα back-end (το κομμάτι που μετατρέπει την ενδιάμεση γενική μορφή κώδικα σε κώδικα μηχανής για την αρχιτεκτονική που θέλουμε).
Ο gcc είναι ο μεταγλωττιστής για C (οκ, έχει ίδιο όνομα) ενώ ο g++ είναι ο μεταγλωττιστής για C++.
Η διαφορά μεταξύ gcc και g++ είναι στο front-end που αναγνωρίζουν γενικά διαφορετική γλώσσα.
Υπάρχουν τέτοιοι μεταγλωττιστές για αρκετές γλώσσες όπως fortran και αρκετές άλλες.