Μεταγλωττίζω κώδικα (Compiling): Η διαδικασία μετατροπής σε γλώσσα μηχανής (εκτελέσιμα) ενός προγράμματος γραμμένου σε γλώσσα ανωτέρου επιπέδου (κώδικας). Για λόγους ευχρηστίας τα προγράμματα που χρησιμοποιούμε στον υπολογιστή μας είναι σε μορφή εκτελέσιμων αρχείων δηλαδή είναι ήδη μεταγλωττισμένα από τους προγραμματιστές / εταιρίες.
Τα διαθέσιμα προγράμματα για Linux έρχονται σε μορφή πακέτων που είναι διαθέσιμα από το Software Center της εκάστοτε διανομής Linux. Ένα κλικ και εγκαταστάθηκε… Όπως καταλαβαίνετε κάποιοι κάνουν την «βρομοδουλειά» για μας. Κάποιοι ξημεροβραδιάζονται για να γράψουν περίπλοκους κώδικες και όταν είναι έτοιμοι το δίνουν στην κοινότητα. Στη συνέχεια οι «πακετάδες» παίρνουν αυτόν τον έτοιμο κώδικα, τον μεταγλωττίζουν για 32bit και 64bit επεξεργαστές και τα πακετάρουν για να είναι έτοιμα προς λήψη και εγκατάσταση. Ο απλός καθημερινός χρήστης του Linux όταν χρειάζεται ένα πρόγραμμα απλά ανοίγει το Software Center (Προσθαφαίρεση Προγραμμάτων), κάνει μια αναζήτηση βρίσκει αυτό που θέλει και πατάει «εγκατάσταση»… Απλά πράγματα… Δεν χρειάζεται να ψάχνει στο ίντερνετ και σε torrents για να βρει αυτό που θέλει.

Η παραπάνω διαδικασία είναι αρκετή για έναν απλό χρήστη. Για τα ανήσυχα μυαλά όμως, η μεταγλώττιση του πηγαίου κώδικα των εφαρμογών αντί χρήσης προ-μεταγλωττισμένων προγραμμάτων είναι η πεμπτουσία της ελευθερίας. Αν δεν με πιστεύεται ρωτήστε κάποιον που χρησιμοποιεί για παράδειγμα την διανομή Gentoo Linux, το ταχύτερο λειτουργικό σύστημα του γαλαξία μας. Για όσους δεν ξέρουν το Gentoo απλά σκεφτείτε οτι αυτό το λειτουργικό σύστημα μεταγλωττίζεται όλο από τον πηγαίο κώδικά του! Δεν είναι τυχαίο λοιπόν γιατί είναι το ταχύτερο λειτουργικό σύστημα. Γιατί όμως κάποιος χρήστης Ubuntu να επιλέξει την μεταγλώττιση του πηγαίου κώδικα αντί να χρησιμοποιήσει έτοιμα πακέτα ;
Η λόγοι που μπορεί να οδηγήσουν κάποιον είναι πάρα πολλοί αλλά θα συνοψίσουμε λέγοντας απλά ότι :
- Τα πακεταρισμένα προγράμματα είναι προ-μεταγλωττισμένα για γενικού σκοπού (generic) επεξεργαστές 32bit ή 64bit ώστε να είναι συμβατές με όλους τους επεξεργαστές των PC.
- Αντίθετα η μεταγλώττιση του κώδικα των εφαρμογών παράγει προγράμματα με βάση τον επεξεργαστή που έχετε (π.χ. Intel, AMD) εκμεταλλευόμενα όλες τις παραμέτρους του επεξεργαστή στον οποίο θα τρέξει.
Επομένως όταν μεταγλωττίζετε των κώδικα μιας εφαρμογής στον δικό σας υπολογιστή, το πρόγραμμα είναι ταχύτερο, αποδοτικότερο και χαμηλών απαιτήσεων σε μνήμη και πόρους του συστήματος. Με απλά λόγια, το πρόγραμμα αυτό δεν είναι τουρίστας αλλά είναι στο σπίτι του.
Η μεταγλώττιση των εφαρμογών απαιτεί μια «οικειότητα» με την χρήση του τερματικού αλλά δεν είναι και τόσο δύσκολο αν έχετε Ubuntu Linux ή οποιοδήποτε παράγωγο του Debian Linux. Ας δούμε βήμα-βήμα την όλη την διαδικασία…
Βήμα 1
Ανοίγουμε το τερματικό πηγαίνοντας Εφαρμογές –> Βοηθήματα –> Τερματικό. Τις εντολές που θα γράψω μπορείτε να τις αντιγράψετε με δεξί κλικ και να τις επικολλήσετε στο τερματικό σας.
Τρέχουμε την πρώτη εντολή που είναι απαραίτητη για να κατεβάσει και να εγκαταστήσει τα απαραίτητα εργαλεία για μεταγλώττιση του κώδικα:
sudo apt-get install build-essential fakeroot dpkg-dev
Βήμα 2
Σε αυτό το βήμα αποφασίστε πιο πρόγραμμα θέλετε να μεταγλωττίστε και να κάνετε εγκατάσταση από τον πηγαίο του κώδικα. Εδώ ως παράδειγμά θα χρησιμοποιήσουμε το Gimp (το Adobe Photoshop του Linux). Το Gimp το χρησιμοποιώ συχνά για να επεξεργάζομαι τις φωτογραφίες μου οπότε θέλω να το μεταγλωττίσω για τον επεξεργαστή μου (Intel i7 quad-core). Εσείς αντί το όνομα gimp βάλτε το όνομα του προγράμματος που θέλετε. Ας δημιουργήσουμε έναν φάκελο μέσα στον οποίο θα δουλέψουμε:
mkdir Build
cd Build
Κατεβάζουμε τον πηγαίο κώδικα της εφαρμογής μας:
apt-get source gimp
Προσέξτε ότι αυτή τη φορά δεν χρησιμοποίησα το «sudo» να αποκτήσω δικαιώματα υπερχρήστη/administrator. Στην περίπτωσή μας δεν το θέλουμε αυτό. Αν πάτε Τοποθεσίες –> Προσωπικός Φάκελος, εκεί θα δείτε έναν φάκελο Build μέσα στον οποίο θα βρείτε εναν φάκελο με τον πηγαίο κώδικα, την συμπιεσμένη μορφή (tar.gz) του προγράμματος και τον οδηγό αποσυμπίεσης που έχει κατάληξη .dsc.
Βήμα 3
Σε αυτό το βήμα θα εγκαταστήσουμε τις προαπαιτούμενες βιβλιοθήκες για την μεταγλώττιση του προγράμματός μας (Gimp):
sudo apt-get build-dep gimp
Έπειτα πρέπει να αποσυμπιέσουμε το πρόγραμμά μας με βάση τις οδηγίες που βρίσκονται στο αρχείο με κατάληξη .dsc
dpkg-source -x gimp_2.6.11-1ubuntu3.dsc
cd gimp-2.6.11
Βήμα 4
Τώρα με την τελευταία εντολή «cd» πρέπει να ήμαστε μέσα στον φάκελο του πηγαίου κώδικα. Οπότε το μόνο που μένει να κάνουμε είναι η μεταγλώττιση και το πακετάρισμα του προγράμματός μας:
dpkg-buildpackage -rfakeroot -b
Η ολοκλήρωση της εντολής μπορεί να διαρκέσει αρκετή ώρα, γιαυτό όσο διαρκεί διαβάστε κάποιο άλλο άρθρο στο Cerebrux ;) Μόλις ολοκληρωθεί στον φάκελο build θα βρείτε πακέτα με κατάληξη .deb
Λογικά αμέσως μετά την ολοκλήρωση της δημιουργίας των πακέτων, στο τερματικό θα είστε ακόμα στον φάκελο του κώδικα του προγράμματος (π χ. gimp-2.6.11). Για να εγκαταστήσετε τα πακέτα θα πρέπει να πάτε ένα φάκελο ποιό πάνω στο τερματικό με την εντολή :
cd ..
Έπειτα εγκαταστήστε τα με την εντολή :
sudo dpkg -i Onoma_paketou-x.v.z.deb Onoma_2ou_paketou-x.v.z.deb
Για να μην πληκτρολογείτε ένα-ένα όλα τα πακέτα, μπορείτε να ανοίξετε τον φάκελο Build και σύρετε τα πακέτα στο τερματικό. Αυτό θα αναλάβει αυτόματα να βάλει την διαδρομή και τα ονόματα των πακέτων. Μόλις τελειώσετε με την προσθήκη των πακέτων πατήστε ENTER. Αγνοήστε τα πακέτα που περιέχουν στο όνομά τους τα προθέματα «-dev» και «-dbg»
Τέλος για λόγους ευκολίας ας συνοψίσουμε τις εντολές που χρησιμοποιήσαμε για την μεταγλώττιση:
- apt-get source Onoma_progratos
- sudo apt-get build-dep Onoma_progratos
- dpkg-source -x Onoma_progratos.dsc
- dpkg-buildpackage -rfakeroot -b
Κλείνοντας θα παραθέσω και κάποιες παραμέτρους που προσθέτω για να εξειδικεύω ακόμα ποιο πολύ τον μεταγλωττιστή. Στο Βήμα 4 δεν τρέχω την εντολή «dpkg-buildpackage -rfakeroot -b» αλλά :
CFLAGS=»-march=native -o2 -pipe»
CXXFLAGS=»${CFLAGS}»
DEB_BUILD_OPTIONS=»–enable-gui –enable-radio» fakeroot debian/rules binary
Ωραίος οδηγός
Θα ήταν ωραίο όμως να επεξηγείς επακριβώς τι κάνει κάθε εντολή
Ευχαριστώ Δημήτρη,
Ο λόγος για τον οποίο δεν μπήκα στην διαδικασία να περιγράψω την κάθε εντολή, είναι επειδή ο οδηγός θα ξέφευγε κατά πολύ και στην ουσία (μεταγλώττιση και πακετάρισμα στα γρήγορα) αλλά και σε όγκο ! Οι αναγνώστες ιστοσελίδων κουράζονται εύκολα ξέρεις… γιαυτό απλά δίνω τα βασικά βήματα και όποιος είναι οικείος με το τερματικό και τις εντολές ξέρει να βρει τον δρόμο του. Όπως αναφέρω και στο άρθρο ο οδηγός είναι για αυτούς που είναι μέσου επιπέδου χρήστες και για ανήσυχους αρχάριους. :)