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 !
|