87 γραμμές
7,8 KiB
Markdown
87 γραμμές
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 !
|