2. Στατικές (static) βιβλιοθήκες

Οι στατικές βιβλιοθήκες είναι απλά μια συλλογή από τα συνηθισμένα object files (αρχεία αντικειμένου) - συνήθως, οι στατικές βιβλιοθήκες τελειώνουν με ένα επίθημα ".a". Αυτή η συλλογή δημιουργείται χρησιμοποιώντας το πρόγραμμα ar (archiver). Οι στατικές βιβλιοθήκες δεν χρησιμοποιούνται πια τόσο συχνά όσο κάποτε, λόγω των πλεονεκτημάτων των διαμοιραζόμενων βιβλιοθηκών (που περιγράφονται παρακάτω). Ωστόσο, συνεχίζουν να επιλέγονται μερικές φορές, εμφανίστηκαν πρώτες ιστορικά, και είναι απλούστερες στην εξήγηση.

Οι στατικές βιβλιοθήκες επιτρέπουν στους χρήστες να τις συνδέσουν με τα προγράμματα τους (link to programs), χωρίς να πρέπει να γίνει αναγκαστικά recompilation του κώδικα του προγράμματος, κερδίζοντας έτσι αυτό το χρόνο της επαναμεταγλώττισης. Βέβαια ο χρόνος για τη διαδικασία επαναμεταγλώττισης δεν είναι τη σήμερον ημέρα τόσο σπουδαίος, δεδομένων των σημερινών ταχύτατων μεταγλωττιστών, οπότε το πλεονέκτημα αυτό έχει εξασθενίσει σε σχέση με παλιότερα. Οι στατικές βιβλιοθήκες είναι συχνά χρήσιμες για τους developers εάν επιθυμούν να επιτρέψουν στους προγραμματιστές να συνδέσουν τα προγράμματα τους με τη βιβλιοθήκη των πρώτων, αλλά δεν θέλουν να δώσουν τον πηγαίο κώδικα της (που είναι ένα πλεονέκτημα για τον κατασκευαστή βιβλιοθηκών βέβαια, αλλά προφανώς δεν είναι τέτοιο για τον προγραμματιστή που προσπαθεί να χρησιμοποιήσει τη βιβλιοθήκη). Θεωρητικά, ο κώδικας στις στατικές βιβλιοθήκες ELF που συνδέεται με έναν εκτελέσιμο πρέπει να τρέξει ελαφρώς γρηγορότερα (από 1-5%) από ότι αν ο ίδιος κώδικας παρεχόταν απο μια διαμοιραζόμενη ή μια δυναμική βιβλιοθήκη, αλλά στην πράξη αυτό φαίνεται σπάνια να συμβαίνει εξαιτίας άλλων, αλληλοαναιρούμενων παραγόντων.

Για να δημιουργήσετε μια στατική βιβλιοθήκη, ή να προσθέσετε τα πρόσθετα κι άλλα object files σε μια υπάρχουσα, χρησιμοποιήστε μια εντολή σαν την παρακάτω:

ar rcs my_library.a file1.o file2.o

Η εντολή στο παραπάνω παράδειγμα προσθέτει τα object files: file1.o και file2.ο στη στατική βιβλιοθήκη my_library.a, δημιουργόντας τη βιβλιοθήκη my_library.a, εάν δεν υπάρχει ήδη. Για περισσότερες πληροφορίες για τη δημιουργία των στατικών βιβλιοθηκών, δείτε το ar(1).

Μόλις δημιουργήσετε μια στατική βιβλιοθήκη, θα θελήσετε, φυσικά, να τη χρησιμοποιήσετε. Μπορείτε να χρησιμοποιήσετε μια στατική βιβλιοθήκη καλώντας τη κατά τη διαδικασία της μεταγλώττισης και σύνδεσης (compilation and linking process) για τη δημιουργία ενός εκτελέσιμου προγράμματος . Εάν χρησιμοποιείτε το gcc(1) για να παραγάγετε το εκτελέσιμό σας, μπορείτε να χρησιμοποιήσετε την (προαιρετική) παράμετρο -l και να προσδιορίσετε τη βιβλιοθήκη. Περισσότερες πληροφορίες σχετικά μπορείτε να δείτε χρησιμοποιώντας το info (info:gcc).

Να είστε προσεκτικοί στη σειρά των παραμέτρων που χρησιμοποιείτε με το GCC - η προαιρετική παράμετρος -l είναι μια προαιρετική δυνατότητα για τον linker (το τμήμα που είναι υπεύθυνο για τη σύνδεση π.χ. της βιβλιοθήκης με το κυρίως πρόγραμμα), και πρέπει γι' αυτό να τοποθετηθεί ΜΕΤΑ το όνομα του αρχείου που μεταγλωττίζεται. Αυτό είναι αρκετά διαφορετικό από τη συνήθη σύνταξη των προαιρετικών παραμέτρων. Εάν τοποθετήσετε την προαιρετική παράμετρο -l πριν από το όνομα αρχείου, μπορεί να αποτύχει πλήρως το linkning, και να καταλήξετε με ένα σωρό από μυστήρια σφάλματα.

Μπορείτε επίσης να χρησιμοποιήσετε τον linker ld(1) άμεσα, χρησιμοποιώντας τις παραμέτρους του -l και -L, εντούτοις, στις περισσότερες περιπτώσεις είναι καλύτερο να χρησιμοποιηθεί ο GCC (1) δεδομένου ότι η διεπαφή του LD (1) είναι πιθανότερο να αλλάξει.