Εφαρμογές: Μεταγλώττιση/compile στο Linux

dimitris | Κυρ, 01/13/2008 - 23:05 | 5' | 11

Οι περισσότερες διανομές διαθέτουν μεγάλα repositories (αποθετήρια ή πηγές λογισμικού) στο Διαδίκτυο, τα οποία περιέχουν pre-built (δηλαδή έτοιμα) πακέτα σχεδόν κάθε εφαρμογής που φαντάζεστε. Αυτά τα πακέτα μπορείτε να τα εγκαταστήστε από το διαχειριστή πακέτων της διανομής σας, αρκεί να έχετε γρήγορη σύνδεση με το Διαδίκτυο. Δείτε αυτό το tutorial για τη διάκριση των pre-built πακέτων από τα tarballs πηγαίου κώδικα και για το πως γίνεται η εγκατάσταση λογισμικού από τους διαχειριστές πακέτων των μεγάλων διανομών.

Κάποια στιγμή όμως θα χρειαστεί να κάνετε build μια εφαρμογή, δηλαδή να τη μεταγλωττίσετε, από τον πηγαίο κώδικά της.

Συνήθως, αυτό θα το κάνετε αν δεν υπάρχει κάποιο έτοιμο πακέτο της ή αν θέλετε να βάλετε κάποιο patch στον κώδικά της. Η διαδικασία της μεταγλώττισης μιας εφαρμογής από τον κώδικα της δεν είναι ιδιαίτερα δύσκολη. Έστω λοιπόν ότι έχετε στην επιφάνεια εργασίας το tarball (το συμπιεσμένο αρχείο με τον κώδικα) μιας εφαρμογής π.χ. το foo-1.2.3.tar.gz

Ανοίξτε μια κονσόλα (ALT+F2 > konsole ή terminal) και στο νέο παράθυρο γράψτε:

cd ~/Desktop

για να πάτε στο φάκελο όπου βρίσκεται το foo-1.2.3.tar.gz.

Tώρα, πρέπει να αποσυμπιέσετε το tarball με μία από τις παρακάτω εντολές (ανάλογα με την κατάληξη του αρχείου):

tar xvzf foo-1.2.3.tar.gz
tar xvjf foo-1.2.3.tar.bz2

Ο κώδικας αποσυμπιέζεται συνήθως σε ένα νέο φάκελο που έχει παρόμοιο όνομα με το tarball. Τότε μπαίνετε στο νέο φάκελο με:

cd foo-1.2.3

Εκεί βρείτε τα αρχεία README ή INSTALL και ρίξτε τους μια ματιά, επειδή συνήθως περιέχουν χρήσιμες πληροφορίες και οδηγίες. Μετά πρέπει, συνήθως, να δώσετε τη λεγόμενη 'αγία τριάδα' των εντολών μεταγλώττισης:
 

./configure
make
su -c 'make install'
ή sudo make install(στο Ubuntu)

Η πρώτη εντολή ελέγχει το σύστημα και επιβεβαιώνει ότι έχετε τις απαραίτητες βιβλιοθήκες και εφαρμογές (οι λεγόμενες εξαρτήσεις) από τις οποίες εξαρτάται το νέο πρόγραμμα. Εάν έχετε διανομή συμβατή με RPM και παραπονεθεί ότι δεν έχετε μια
βιβλιοθήκη (ενώ την έχετε), στην πραγματικότητα εννοεί ότι πρέπει να
εγκαταστήσετε το πακέτο της με κατάληξη -devel, π.χ. libbar-devel.

Η δεύτερη εντολή κάνει όλη τη 'δουλειά' μεταγλωττίζοντας τον κώδικα και δημιουργώντας εκτελέσιμα αρχεία στον ίδιο φάκελο.

Δεν είναι απαραίτητο να είστε root για τη μεταγλώττιση, αλλά είναι απαραίτητο για την τρίτη εντολή που μεταφέρει τα εκτελέσιμα  αρχεία στους φακέλους του συστήματος. Γι' αυτό στην τρίτη εντολή δίνουμε πρώτα su -c , ώστε η εντολή που ακολουθεί να τρέξει με προνόμια υπερχρήστη. Εξαίρεση είναι το Ubuntu όπου πρέπει να χρησιμοποιήσετε την sudo make install.

Εκτός κι αν ρυθμίσετε αλλιώς το ./configure, το μεταγλωττισμένο πρόγραμμα θα εγκατασταθεί στο /usr/local/bin.

Επομένως, μπορείτε να το τρέξετε δίνοντας

/usr/local/bin/foo

ή ψάξτε που βρίσκεται το εκτελέσιμο με την εντολή:

locate foo
Δώσε αστέρια!
Σχόλια

Εχω το fedora 8 στο pc και οποτε προσπαθώ να εγκαταστησω μια εφαρμογη απο τον πηγαίο κώδικα και δίνω την εντολη ./configure σχεδον πάντα μου δείχνει κατι οτι λείπει το gcc (δεν θυμαμαι το ακριβές μηνυμα γιατι σας στελνω απο αλλο pc), τι πρεπει να κανω;
Ευχαριστω προκαταβολικα

φίλε δημήτρη, μάλλον έχει πρόβλημα και αυτό link :
"...Δείτε αυτό το tutorial για τη διάκριση των pre-built πακέτων από τα tarballs πηγαίου κώδικα...",
στο παραπάνω post σου.
Νομίζω όμως πως την σελίδα που ανοίγει, μπορεί να την διαβάσει κάποιος και από άλλα link, σε άλλα post, σωστά;

bash: ./configure: No such file or directory

Αυτο το μηνυμα μου πεταει ειτε ειμαι απλος χρηστης ειτε root!!!!!!!!!!!!!!
Τι παιζει.......????????????? :? :? :?
Προγραμματα(μικρα) που εχω γραψει εγω σε c και java τα κανει compile κανονικα.......δεν μπορω να καταλαβω τι γινεται!!!!!!!!

Mπορούμε να βάλουμε και  την εντολή "make install clean"  ή πρώτα "make install" μετα "make clean" αλλα με την πρώτη ξεμπερδεύουμε και με τον καθαρισμό των αρχείων 

Καλό θα ήταν να μην κάνει κανείς "make clean" γιατί  μετά δεν θα μπορέσει να δώσει την εντολή για να βγάλει αυτά που εγκατέστησε, δηλαδή "make uninstall". Εκτός και αν ξέρει κανείς που εγκαθίσταται κάθε αρχείο...

andreas_g] bash: ./configure: No such file or directory

Είσαι στο σωστό directory? Το configure έχει τα κατάλληλα δικαιώμτα? Είναι executable(το βασικότερο)?. Υπάρχει ή πρέπει να το δημιουργήσεις?

andreas_g]bash: ./configure: No such file or directory Αυτο το μηνυμα μου πεταει ειτε ειμαι απλος χρηστης ειτε root!!!!!!!!!!!!!! Τι παιζει.......????????????? :? :? :? Προγραμματα(μικρα) που εχω γραψει εγω σε c και java τα κανει compile κανονικα.......δεν μπορω να καταλαβω τι γινεται!!!!!!!!

Γαμώτο!  Κι εμένα μου το έχει βγάλει αυτό το παλιομήνυμα!  Προσπαθώ να περάσω έναν παλιοdriver για την κάμερά μου στο Funtoo!

------------------------------------------------------------------------------------------------

"Όταν βλέπεις τον πιγκουίνο, ξέρεις τι πρέπει να κάνεις": ΒΑΖΕΙΣ LINUX!

Απλά σας λείπει το ./configure βρε παιδιά...Δεν είναι απαραίτητο ότι υπάρχει σε όλα τα tarballs - ίσως να μην το εξήγησα καλά στο αρχικό post: η αγία τριάδα των εντολών μεταγλώττισης ισχύει για τα περισσότερα προγράμματα, αλλά όχι για όλα. Πρέπει να ρίχνετε μια ματιά στο INSTALL για οδηγίες...

mitsaras77]

Καλό θα ήταν να μην κάνει κανείς "make clean" γιατί  μετά δεν θα μπορέσει να δώσει την εντολή για να βγάλει αυτά που εγκατέστησε, δηλαδή "make uninstall". Εκτός και αν ξέρει κανείς που εγκαθίσταται κάθε αρχείο...

andreas_g] bash: ./configure: No such file or directory

Είσαι στο σωστό directory? Το configure έχει τα κατάλληλα δικαιώμτα? Είναι executable(το βασικότερο)?. Υπάρχει ή πρέπει να το δημιουργήσεις?

 

Δεν το ήξερα αυτό αδερφέ δηλαδή αυτά που καθαρίζει με το clean απο που παει και τα καθαρίζει απο το /TMP?

 

 Οχι, η εντολη make uninstall κάνει ακριβώς το αντίθετο από αυτό που κάνει το make install. Δηλαδή αφαιρεί αυτά που εγκατέστησες από τους διάφορους καταλόγους (/usr/local/bin , /usr/local/lib κλπ). Αν δώσεις το make clean αυτή η δυνατότητα χάνεται. Υπόψιν, δεν παρέχεται πάντα η δυνατότητα για make uninstall

mitsaras77]

 Οχι, η εντολη make uninstall κάνει ακριβώς το αντίθετο από αυτό που κάνει το make install. Δηλαδή αφαιρεί αυτά που εγκατέστησες από τους διάφορους καταλόγους (/usr/local/bin , /usr/local/lib κλπ). Αν δώσεις το make clean αυτή η δυνατότητα χάνεται. Υπόψιν, δεν παρέχεται πάντα η δυνατότητα για make uninstall

 

Eννοείς Μιτσάρα ότι αν δεν παρέχεται πρέπει να την κάνουμε με το χέρι "whereis" και να δούμε που ειναι και να τα αφαιρέσουμε σωστά ;