88 γραμμές
		
	
	
	
		
			7,8 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
		
		
			
		
	
	
			88 γραμμές
		
	
	
	
		
			7,8 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| 
								 | 
							
								+++
							 | 
						|||
| 
								 | 
							
								title = 'Προγραμματισμός σε C/C++ στο Linux'
							 | 
						|||
| 
								 | 
							
								date = '1998-11-01T00:00:00Z'
							 | 
						|||
| 
								 | 
							
								description = ''
							 | 
						|||
| 
								 | 
							
								author = 'Γιάννης Εξηνταρίδης'
							 | 
						|||
| 
								 | 
							
								issue = ['Magaz 09']
							 | 
						|||
| 
								 | 
							
								issue_weight = 2
							 | 
						|||
| 
								 | 
							
								+++
							 | 
						|||
| 
								 | 
							
								----------------------------------------------------------------------------------------------------------------------------------------------------------------
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								*Αρκετοί που ασχολούνται με προγραμματισμό (είτε ερασιτεχνικά, είτε επαγγελματικά) και έχουν έρθει στον κόσμο του Linux, αναρωτιούνται ίσως τι γίνεται με την
							 | 
						|||
| 
								 | 
							
								ανάπτυξη εφαρμογών. Τα παρακάτω επιχειρούν να ρίξουν φως σε αυτόν τον τομέα.*
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								----------------------------------------------------------------------------------------------------------------------------------------------------------------
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								Το Linux προσφέρει μια πληθώρα προγραμματιστικών εργαλείων και όπως αντιλαμβάνεστε είναι φυσικό η C/C++ να έχει την τιμητική της στο κόσμο του Linux μια που η
							 | 
						|||
| 
								 | 
							
								πλειοψηφία των εφαρμογών (όπως εξάλλου και το ίδιο το λειτουργικό) είναι γραμμένες σε αυτή την γλώσσα. Στο Linux κυριαρχεί το κλασικό στύλ ανάπτυξης εφαρμογών.
							 | 
						|||
| 
								 | 
							
								Δηλαδή editing του κώδικα σε ένα απλό text editor, compiling (από την γραμμή εντολής φυσικά) running και debugging. Το compiling γίνεται από τον πανίσχυρο GNU
							 | 
						|||
| 
								 | 
							
								compiler (gcc αν πρόκειται για πρόγραμμα C, g++ αν πρόκειται για πρόγραμμα C++).
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								Μερικά απλά παραδείγματα θα δείξουν την χρήση του. Για να κάνουμε ένα απλό compiling αρκεί να δώοσυμε την εντολή gcc -c hello.c (όπου hello.c ο source κώδικας
							 | 
						|||
| 
								 | 
							
								μας).
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								Για να κάνουμε compiling + linking θα δώοσυμε την εντολή
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								**gcc -o hello hello.c**
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								Να τονίσουμε ότι ΠΡΕΠΕΙ να δώσουμε όνομα στο τελικό εκτελέσιμο αρχείο που θα προκύψει. ΔΕΝ εννοείται ότι το αρχείο θα ονομαστεί hello. Αντίθετα το default είναι
							 | 
						|||
| 
								 | 
							
								να ονομαστεί a.out.
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								Οι διάφορες libraries στις οποίες θα γίνει link η εφαρμογή μας δηλώνονται με -l(όνομα library χωρίς το πρόθεμα lib). Π.χ. Αν έχουμε γράψει ένα πρόγραμμα το
							 | 
						|||
| 
								 | 
							
								οποίο χρησιμοποιεί την I/O library της C++ θα πρέπει να γράψουμε
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								**g++ -o hello hello.cpp -liostream**
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								To αρχείο που αντιστοίχει στην library iostream είναι το libiostream.a
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								Αν θέλαμε να κάνουμε link με την standard C library θα γράφαμε
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								**gcc -o hello hello.c -lc**
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								Oμοια το αρχείο που αντιστοίχει στην standard C library είναι το libc.a
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								Από τα παραπάνω φαίνεται η λογική της διαδικασίας όταν θέλουμε να εκτελέσουμε link σε κάποια library. Στην πραγματικότητα τα παραπάνω ( δηλαδή -lc ή -liostream)
							 | 
						|||
| 
								 | 
							
								δεν χρειαζόντουσαν γιατί εξ\' ορισμού ο gcc αυτόματα εκτελεί link σε αυτές. Χρειάζεται όμως σε άλλες περιπτώσεις.
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								Ο gcc δέχεται πάρα πολλές επιλογές οι οποίες δεν είναι δυνατόν να καλυφτούν σε ένα μόνο άρθρο. Η καλύτερη πηγή για αυτά αποτελεί το ίδιο το manual του (ή οι man
							 | 
						|||
| 
								 | 
							
								pages). Θα τονίσουμε απλά τις πιο σημαντικές. Κάθε προγραμματιστής που σέβεται τον εαυτό του ξέρει ότι η εφαρμογή πρέπει να είναι όσο το δυνατόν
							 | 
						|||
| 
								 | 
							
								βελτιστοποιημένη (τόσο από άποψη ταχύτητας όσο και από άποψη μεγέθους)
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								Βελτιστοποίση σε ένα ορισμένα βαθμό γίνεται με την επιλογή -Ο1 Π.χ
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								**gcc -O1 -o \[output\] \[input\]**
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								Ακόμα περισσότερο
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								**gcc -O2 -o \[output\] \[input\]**
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								Μήπως θέλουμε να αναφέρονται όλα τα warnings ? Τότε αρκεί να δώσουμε ένα
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								**gcc -Wall -o \[output\] \[input\]**
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								Και το debugging ? Τι γίνεται με αυτό ? Ο GNU debugger είναι ο gdb. Επειδή όμως χρειαζόμαστε και debugging info προτού περάσουμε στην χρήση του χρειάζεται να
							 | 
						|||
| 
								 | 
							
								δώσουμε ένα
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								**gcc -g -o \[output\] \[input\]** πρώτα και είμαστε έτοιμοι.
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								Και το profiling ? Μην ανησυχείτε. Υπάρχει και αυτό. Δώστε ένα
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								**gcc -pg -o \[output\] \[input\]**
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								εκτελέστε την εφαρμογή, μετά δώστε ένα gprof gmon.out (όπου gmon.out το αρχείο που δημουργείται) και θα δείτε ένα σωρό χρήσιμες πληροφορίες. Οπως βλέπετε τίποτα
							 | 
						|||
| 
								 | 
							
								δεν λείπει.
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								Ισως τα παραπάνω να φανούν λιγάκι απαρχαιωμένα στους μοντέρνους προγραμματιστές οι οποίοι έχουν μάθει στα (πολύ καλά ομολογουμένως) ολοκληρωμένα περιβάλλοντα,
							 | 
						|||
| 
								 | 
							
								στις σουίτες ανάπτυξης εφαρμογών κ.λπ. Η αλήθεια είναι πως είχαν και άλλοι τις ίδιες ανησυχίες, για αυτό και προχώρησαν σε κάτι ανάλογο. Υπάρχουν τέτοια
							 | 
						|||
| 
								 | 
							
								πράγματα σε Linux και τελείως ενδεικτικά θα αναφέρω το RHIDE (το οποίο στον τρόπο λειτουργίας θα θυμίσει πολύ το IDE της Borland για DOS), το xwke, τον ddd (
							 | 
						|||
| 
								 | 
							
								Data display Debugger ), τον kdbg (K Debugger για όσους έχουν KDE στο σύστημά τους ) κ.λπ. Δεν λείπουν επίσης βιβλιοθήκες ρουτινών και συναρτήσεων. Όλα αυτά θα
							 | 
						|||
| 
								 | 
							
								τα βρείτε στο τμήμα Software/Programming του <http://www.linuxlinks.com>.
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								Η αλήθεια είναι πάντως πως ο GNU έχει την τιμητική του και στον κόσμο του DOS. Πράγματι ο γνωστός DJGPP compiler δεν είναι τίποτα παραπάνω από ένα porting του
							 | 
						|||
| 
								 | 
							
								gcc στο DOS. Για πολλά χρόνια έχει αποτελέσει την ίσως μοναδική λύση, για 32bit εφαρμογές και φυσικά παιχνίδια στην παραπάνω πλατφόρμα. (Π.χ. το Quake, ο πολύ
							 | 
						|||
| 
								 | 
							
								γνωστός emulator MAME κ.λπ.)
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								Φυσικά τα παραπάνω δεν φιλοδοξούν να καλύψουν το κεφάλαιο \"προγραμματισμός C/C++ στο Linux\". Απλά αποτελούν μια πρώτη εισαγωγή και στην πραγματικότητα μόλις
							 | 
						|||
| 
								 | 
							
								που αγγίζουν την κορυφή του παγόβουνου. Για παράδειγμα δεν αναφερθήκαμε καθόλου σε X programming ούτε και Assembly programming (Για το τελευταίο επιφυλλασόμεθα
							 | 
						|||
| 
								 | 
							
								σε μελλοντικό αρθράκι). Καλώς ήρθατε στον κόσμο του Gcc !
							 |