Χρήση της LEDA στα συστήματα του ΠΕΠ-Ι

Για να χρησιμοποιήσετε τους αλγόριθμους και τύπους δεδομένων που παρέχονται απο την LEDA στους σταθμούς εργασίας του ΠΕΠ-Ι, πρέπει να κάνετε τα εξής:

  1. Πρέπει καταρχήν να ξέρετε ποιος είναι ο αρχικός κατάλογος της LEDA (LEDA root directory). Αυτός ο κατάλογος, έστω <leda-root-path>, πρέπει να αποθηκεύεται στη μεταβλητή περιβάλλοντος LEDAROOT. Στα συστήματα του ΠΕΠ-Ι, τo <leda-root-path> είναι: /usr/local/leda
    Πρέπει να αναθέσετε το
    <leda-root-path> στην μεταβλητή περιβάλλοντος LEDAROOT. Αυτό εξαρτάται απο το Unix shell που χρησιμοποιείτε και γίνεται ως εξής:
    • Για csh/tcsh, προσθέστε στο αρχειο .cshrc την εντολη:
      setenv LEDAROOT <leda-root-path>
    • Για sh/bash, προσθέστε στο αρχειο .bash_profile τις εντολές:
      LEDAROOT=<leda-root-path>
      export LEDAROOT

Π.χ., για τους σταθμούς εργασίας του ΠΕΠ-Ι, αν χρησιμοποιείτε csh/tcsh, πρεπει να προσθέσετε στο .cshrc σας τη γραμμή:
setenv LEDAROOT /usr/local/leda
 

  1. Πρέπει επίσης να αναθέσετε τιμή και σε μια άλλη μεταβλητή περιβάλλοντος που λέγεται LD_LIBRARY_PATH και είναι σημαντική όταν χρησιμοποιείτε διαμοιραζόμενες βιβλιοθήκες (shared libraries).
    • Για csh/tcsh, προσθέστε στο αρχείο .cshrc την εντολή:
      setenv LD_LIBRARY_PATH <leda-root-path>:${LD_LIBRARY_PATH}
    • Για sh/bash, προσθέστε στο αρχείο .bash_profile τις εντολές:
      LD_LIBRARY_PATH=<leda-root-path>:$LD_LIBRARY_PATH
      export LD_LIBRARY_PATH

 

  1. Μεταγλώττιση και σύνδεση προγραμμάτων:
    • Χρησιμοποιείστε την επιλογή -I του μεταγλωττιστή για να ορίσετε το που βρίσκονται τα αρχεία κεφαλίδας της LEDA (LEDA header files).
      g++ -I${LEDAROOT}/incl -I${LEDAROOT}/incl/G++ -c file.c
    • Χρησιμοποιείστε την επιλογή -L του μεταγλωττιστή για να ορίσετε το που βρίσκονται οι βιβλιοθηκες της LEDA (LEDA library files).
      g++ -L${LEDAROOT} file.o <libs>
    • Ανάλογα με τις συναρτήσεις και κλάσεις που χρησιμοποιείτε, θα πρέπει επίσης να φορτώσετε και τις αντίστοιχες βιβλιοθήκες κατά τη σύνδεση του κώδικά σας. Αυτό γίνεται μέσω της επιλογής -l του μεταγλωττιστή. Για παράδειγμα, η παρακάτω εντολή φορτώνει την βιβλιοθήκη βασικών τύπων της LEDA και τη βιβλιοθήκη μαθηματικών συναρτήσεων της C:
      g++ -L${LEDAROOT} file.o -lL -lm
      Τα συστήματα με λειτουργικό
      SunOS διαθέτουν την εμπορική/ακαδημαϊκή έκδοση της LEDA, στην οποία οι διάφορες λειτουργίες είναι διαμοιρασμένες σε πολλά αρχεία βιβλιοθηκών. Πιο συγκεκριμένα, διατίθενται μεταξύ άλλων οι βιβλιοθήκες:
      • libL.a (-lL): Basic data types
      • libG.a (-lG): Graph data types
      • libP.a (-lP): Planar geometry
      • libD3.a (-lD3): 3D geometry
      • libW.a (-lW): Windows

Αντιθέτως, τα συστήματα με λειτουργικό σύστημα Debian GNU/Linux διαθέτουν την δωρεάν έκδοση της LEDA, στην οποία όλες οι λειτουργίες βρίσκονται σε ένα αρχείο:

      • libleda.a/libleda.so (-lleda)

Ωστόσο, απαιτούν χρήση και των βιβλιοθηκών μαθηματικών και παραθυρικής απεικόνισης του συστήματος:

      • libX11.so (-lX11)
      • libm.so (-lm)

Προσοχή:

      • Η σείρα με την οποία συνδέονται οι βιβλιοθήκες είναι σημαντική. Προσέξτε η σύνδεση να γίνεται πάντα με τη σειρά που αναφέρονται οι βιβλιοθήκες παραπάνω και να προστίθενται πάντα στο τέλος. Επίσης, απαιτείται πάντα και η χρήση της βιβλιοθήκης μαθηματικών συναρτήσεων του συστήματος (-lm), αν και σε νεώτερες εκδόσεις του μεταγλωττιστή προστίθεται αυτόματα.
      • Λόγω προσωρινού προβλήματος ασυμβατότητας του dynamic linker στα συστήματα Debian, είναι αναγκαίο να προσθέσετε και την επιλογή -static στον μεταγλωττιστή.
      • Για χρήση παραθύρων σε περιβάλλον SunOS ίσως να πρέπει να κάνετε σύνδεση και με τις βιβλιοθήκες socket και thread του συστήματος:
        g++ ... -lW -lP -lG -lL -lX11 -lsocket -lthread -lm

Μπορείτε να κάνετε ταυτόχρονη μεταγλώττιση και σύνδεση δίνοντας:
g++ -I${LEDAROOT}/incl -I${LEDAROOT}/incl/G++ -L${LEDAROOT} file.c <libs> -o file
Μπορείτε επίσης να κάνετε χρήση ενός
Makefile. Για τις ανάγκες του εργαστηρίου διατίθεται ένα απλό Makefile εδώ, ενώ εδώ μπορείτε να βρείτε και έναν γενικότερο οδηγό για την κατασκεύη τέτοιων αρχείων.
Όταν μεταγλωττίζετε/συνδέετε τα προγράμματά σας, είναι καλό να χρησιμοποιείτε και την επιλογή βελτιστοποήησης
-O του μεταγλωττιστή g++. Επειδή και οι βιβλιοθήκες της LEDA έχουν προμεταγλωττιστεί με αυτή την επιλογή, ενδέχεται να χάνετε σε ταχύτητα (εναντι παρομοίων υλοποιήσεων της LEDA) αν δεν χρησιμοποιήσετε την επιλογή αυτή.

 

  1. Χρήση των τύπων δεδομένων της LEDA:
    Αν θέλετε να κάνετε χρήση του τύπου δεδομένων
    Type της LEDA, θα πρέπει να συμπεριλάβετε το αντίστοιχο αρχείο κεφαλίδας <LEDA/Type.h> στον κώδικά σας. Π.χ., για να χρησιμοποιήσετε τους τύπους δεδομένων stack (στοίβα) και queue (ουρά), θα πρέπει να συμπεριλάβετε τα εξής:
    #include <LEDA/stack.h>
    #
    include <LEDA/queue.h>
    Στη δωρεάν έκδοση της
    LEDA, τα αρχεία κεφαλίδας βρίσκονται μοιρασμένα σε υποκαταλόγους κάτω από το /usr/local/leda/incl/LEDA. Για παράδειγμα, οι παραπάνω γραμμές θα έπρεπε να γίνουν:
    #include <LEDA/core/stack.h>
    #
    include <LEDA/core/queue.h>

Επιστροφή στην αρχική σελίδα του εργαστηρίου.