Σελίδα 1 από 3

Μεταγλώττιση (compilation/compile) πακέτων του GNOΜΕ

ΔημοσίευσηΔημοσιεύτηκε: 24 Αύγ 2008, 15:10
από simosx
Cygnus έγραψε:Τώρα για το gupnp κατά τη μεταγλώττιση του gssdp μου βγάζει τα εξής:
Κώδικας: Επιλογή όλων
....
checking pkg-config is at least version 0.9.0... yes
checking for LIBGSSDP... configure: error: Package requirements (gobject-2.0 >= 2.9.1 libsoup-2.4) were not met:

No package 'gobject-2.0' found
No package 'libsoup-2.4' found

Consider adjusting the PKG_CONFIG_PATH environment variable if you
installed software in a non-standard prefix.

Alternatively, you may set the environment variables LIBGSSDP_CFLAGS
and LIBGSSDP_LIBS to avoid the need to call pkg-config.
See the pkg-config man page for more details.


Το παραπάνω μήνυμα είναι κλασσικότατο μήνυμα κατά τη μεταγλώττιση. Αυτό που σημαίνει είναι ότι χρειάζεται να εγκαταστήσεις τα πακέτα ανάπτυξης εφαρμογών για τα gobject και libsoup.

Είναι σημαντικό να ξεκαθαρίσσουμε ότι κατά τη μεταγλώττιση θα λαμβάνουμε τέτοια μηνύματα ότι κάτι λείπει. Για κάθε μήνυμα, κάνουμε εγκατάσταση κάποιου πακέτου, και δοκιμάζουμε ξανά ./configure. Και βλέπουμε.

Κάνεις αναζήτηση για τα δύο μέσα από το Synaptic, και επιλέγεις να βάλεις τις εκδοχές των πακέτων που έχουν -dev στο όνομά τους. Η μορφή των ονομάτων των πακέτών που χρειάζονται είναι lib + <παραπάνω όνομα> + <κάποια νούμερα> -dev.

Το gobject είναι ειδική (σπάνια) έκδοχη. Με αναζήτηση στο Google για το μήνυμα No package 'gobject-2.0' found εμφανίζει ως πρώτη σελίδα ένα γράμμα που αναφέρει ότι το gobject είναι μέρος του glib, οπότε ψάχνεις για glib και -dev.

Από γραμμή εντολής μπορείς να κάνεις αναζήτηση με

Κώδικας: Επιλογή όλων
apt-cache search libglib


ή και

Κώδικας: Επιλογή όλων
apt-cache search libglib | grep -- -dev


που φιλτράρει να δείξει τα πακέτα που έχουν στο όνομά τους "-dev". Βάζουμε στην εντολή grep τους ειδικούς χαρακτήρες "--" για να δηλώσουμε ότι ό,τι ακολουθεί να μην θεωρηθεί ότι είναι παράμετρος αλλά όρισμα εντολής.

Κώδικας: Επιλογή όλων
$ apt-cache search libglib | grep -- -dev
libglib-java-dev - GLib bindings for Java (development files)
libglib1.2-dev - The GLib library of C routines (development)
libglib2.0-dev - Development files for the GLib library
libglibmm-2.4-dev - C++ wrapper for the GLib toolkit (development files)


Από τα παραπάνω, χρειαζόμαστε το πακέτο libglib2.0-dev (οι βιβλιοθήκες του GNOME είναι στη βασική έκδοση 2.0χ, ενώ οι παλαιότερες εκδόσεις είναι 1.2x. Σε μερικά χρόνια θα υπάρξει μεταφορά στην έκδοση 3.χ)

Κώδικας: Επιλογή όλων
$ apt-cache search libsoup | grep -- -dev
libsoup2.2-dev - an HTTP library implementation in C -- Development files
libsoup2.4-dev - an HTTP library implementation in C -- Development files


Εδώ βάζουμε τη νεώτερη έκδοση.

Και δοκιμάζουμε ξανά με την εντολή ./configure ....

Re: Μεταγλώττιση (compilation/compile) πακέτων του GNOΜΕ

ΔημοσίευσηΔημοσιεύτηκε: 25 Αύγ 2008, 02:28
από Cygnus
Τα εγκατέστησα όλα με τη σωστή σειρά (gssdp, gupnp, gupnp-tools), μου έβγαλε στο Application menu το Programming αλλά όταν πάω να ξεκινήσω κάποιο πρόγραμμα του gupnp αυτό μένει στο starting up και ύστερα εξαφανίζεται.. :oops:

Re: Μεταγλώττιση (compilation/compile) πακέτων του GNOΜΕ

ΔημοσίευσηΔημοσιεύτηκε: 25 Αύγ 2008, 03:10
από simosx
Cygnus έγραψε:Τα εγκατέστησα όλα με τη σωστή σειρά (gssdp, gupnp, gupnp-tools), μου έβγαλε στο Application menu το Programming αλλά όταν πάω να ξεκινήσω κάποιο πρόγραμμα του gupnp αυτό μένει στο starting up και ύστερα εξαφανίζεται.. :oops:


Αυτό που πιστεύω ότι συμβαίνει είναι ότι έχεις εγκαταστημένα τα πακέτα του gupnp (από το Synaptic) και ταυτόχρονα τα αρχεία (2 βιβλιοθήκες + εργαλείο). Έτσι, μπορεί να συμβαίνει κάποιο μπέρδεμα.

1. Βγάλε τις βιβλιοθήκες που εγκατέστησες μέσω του Synaptic.
2. Κάνε επανεκκίνση του υπολογιστή, ή εκτέλεσε sudo ldconfig
Στόχος είναι το σύστημα να ενημερωθεί με τη τρέχουσα λίστα των βιβλιοθηκών.
3. Εκτέλεσε

Κώδικας: Επιλογή όλων
ldd /usr/local/bin/gupnp-universal-cp


Αυτό θα δείξει τις εξαρτήσεις (σε βιβλιοθήκες) που έχει η εφαρμογή. Εδώ πρέπει να έχει 2 εξαρτήσεις από το /usr/local/lib/*, που είναι οι βιβλιοθήκες που μεταγλωττίσαμε. Συγκεκριμένα,

Κώδικας: Επιλογή όλων
$ ldd /usr/local/bin/gupnp-universal-cp | grep "/usr/local/lib"
   libgupnp-1.0.so.2 => /usr/local/lib/libgupnp-1.0.so.2 (0x00007f93f9eb6000)
   libgssdp-1.0.so.1 => /usr/local/lib/libgssdp-1.0.so.1 (0x00007f93f9cac000)


Ως εδώ είμαστε πολύ ωραία. Εκτελείς

$ /usr/local/bin/gupnp-universal-cp


και πρέπει να έχεις το πρόγραμμα να λειτουργεί όπως πριν, δηλαδή, να εμφανίζει το παράθυρο αλλά να μην εντοπίζει το router.

Σε αυτό το σημείο είμαστε σε θέση να κάνουμε την αλλαγή στον κώδικα. Το περιγράφω αυτό σε νέα απάντηση παρακάτω.

Re: Μεταγλώττιση (compilation/compile) πακέτων του GNOΜΕ

ΔημοσίευσηΔημοσιεύτηκε: 25 Αύγ 2008, 03:18
από simosx
Η αλλαγή στον κώδικα, κατά το
http://bugzilla.openedhand.com/show_bug.cgi?id=1078

A. Από το αρχείο gssdp-0.6.1/libgssdp/gssdp-protocol.h
B. αντικαθιστάς το κείμενο

Κώδικας: Επιλογή όλων
#define SSDP_DISCOVERY_REQUEST                      \
        "M-SEARCH * HTTP/1.1\r\n"                   \
        "Host: " SSDP_ADDR ":" SSDP_PORT_STR "\r\n" \
        "Man: \"ssdp:discover\"\r\n"                \
        "ST: %s\r\n"                                \
        "MX: %d\r\n"                                \
        "User-Agent: %s GSSDP/" VERSION "\r\n\r\n"  \


με

Κώδικας: Επιλογή όλων
#define SSDP_DISCOVERY_REQUEST                      \
        "M-SEARCH * HTTP/1.1\r\n"                   \
        "Host: " SSDP_ADDR ":" SSDP_PORT_STR "\r\n" \
        "Man: \"ssdp:discover\"\r\n"                \
        "ST: %s\r\n"                                \
        "MX: %d\r\n\r\n"                            \


Γ. Στον ίδιο κατάλογο εκτελείς
Κώδικας: Επιλογή όλων
make
sudo make install
sudo ldconfig


Δ. Και αυτό ήταν. Τώρα μπορείς να εκτελέσεις
Κώδικας: Επιλογή όλων
/usr/local/bin/gupnp-universal-cp


και θα δεις το router σου, κατά τις οδηγίες στο
http://simos.info/blog/archives/730

Re: Μεταγλώττιση (compilation/compile) πακέτων του GNOΜΕ

ΔημοσίευσηΔημοσιεύτηκε: 25 Αύγ 2008, 03:19
από Cygnus
Όλα όπως τα λες:
Απεγκατέστησα τα πακέτα από synaptic, έκανα επανεκκίνηση,
Κώδικας: Επιλογή όλων
$ ldd /usr/local/bin/gupnp-universal-cp | grep "/usr/local/lib"
   libgupnp-1.0.so.2 => /usr/local/lib/libgupnp-1.0.so.2 (0xb7a41000)
   libgssdp-1.0.so.1 => /usr/local/lib/libgssdp-1.0.so.1 (0xb7a38000)


Και τρέχοντας το πρόγραμμα, δεν βρίσκει το router

Re: Μεταγλώττιση (compilation/compile) πακέτων του GNOΜΕ

ΔημοσίευσηΔημοσιεύτηκε: 25 Αύγ 2008, 03:24
από Cygnus
Δεν το εμφανίζει...Μήπως φταίει ότι αντί για make install κάνω sudo make install γιατί αλλιώς μου βγάζει error; Επίσης υπάρχει τρόπος να το απεγκαταστήσω τελείως και να το ξεκινήσω από την αρχή;

Re: Μεταγλώττιση (compilation/compile) πακέτων του GNOΜΕ

ΔημοσίευσηΔημοσιεύτηκε: 25 Αύγ 2008, 05:11
από simosx
Cygnus έγραψε:Δεν το εμφανίζει...Μήπως φταίει ότι αντί για make install κάνω sudo make install γιατί αλλιώς μου βγάζει error; Επίσης υπάρχει τρόπος να το απεγκαταστήσω τελείως και να το ξεκινήσω από την αρχή;


Ναι, sudo make install θέλει για να βάλει τα αρχεία στη θέση τους. Διαφορετικά δε θα ολοκληρωθεί η εγκατάσταση.

Μπορείς να επιβεβαιώσεις ότι
1. έκανες την αλλαγή στο συγκεκριμένο αρχείο *.h
2. εκτέλεσες sudo make install καθώς βρίσκεσαι μέσα στον κατάλογο με το πηγαίο κώδικα του gssdp
3. εκτέλεσες sudo ldconfig (δεν έχει σημασία σε πιο κατάλογο βρίσκεσαι).

Για απεγκατάσταση, μπορείς να πας στον καθένα από τους 3 καταλόγους με τον πηγαίο κώδικα και να εκτελέσεις

sudo make uninstall

Re: Μεταγλώττιση (compilation/compile) πακέτων του GNOΜΕ

ΔημοσίευσηΔημοσιεύτηκε: 25 Αύγ 2008, 15:23
από Cygnus
ΟΚ το απεγκατέστησα επιτυχώς..Τώρα θα το πάω από την αρχή μήπως και βγει άκρη.

Re: Μεταγλώττιση (compilation/compile) πακέτων του GNOΜΕ

ΔημοσίευσηΔημοσιεύτηκε: 25 Αύγ 2008, 15:39
από Cygnus
Λοιπόν:
1. Εγκαθιστώ κατά σειρά gssdp-0.6.1, gupnp-0.12.1, gupnp-tools-0.6
2. sudo ldconfig
3. Τρέχω το /usr/local/bin/gupnp-universal-cp, ανοίγει το πρόγραμμα και δεν βλέπει το router
4. Πάω και αλλάζω το gssdp-protocol.h και εγκαθιστώ την "νέα" βιβλιοθήκη gssdp
5. sudo ldconfig
6. Τρέχω το /usr/local/bin/gupnp-universal-cp, ανοίγει το πρόγραμμα και ΑΚΟΜΑ δεν βλέπει το router

Ε μα τι στο καλό συμβαίνει πια; :twisted:

ps. simosx σε ευχαριστώ για τη βοήθειά σου..

Re: Μεταγλώττιση (compilation/compile) πακέτων του GNOΜΕ

ΔημοσίευσηΔημοσιεύτηκε: 25 Αύγ 2008, 16:19
από simosx
Έχεις φτάσει πάρα πολύ κοντά στην ολοκλήρωση της διαδικασίας.

Μπορεί να συμβαίνουν διάφορα. Ας τα πάρουμε από την αρχή.

α. Χρησιμοποιείς το wireshark για να διαβάσεις τα πακέτα του δικτύου σου.
Φυσικά κλείνεις ό,τι άλλο διακτυακό πρόγραμμα για να είναι απλό το αποτέλεσμα της σύλληψης των πακέτων. Ανοίγεις λοιπόν το wireshark και το βάζεις να τρέχει
β. Τρέχεις το gupnp-universal-cp, το αφήνεις για 5 δευτερόλεπτα και μετά το κλείνεις.
γ. Πας πίσω στο wireshark, διακόπτεις τη σύλληψη πακέτων και κοιτάς το αποτέλεσμα.

Εδώ προσπαθείς να δεις τα πακέτα που στέλνει το gupnp-universal-cp. Για να σε βοηθήσει, τα πακέτα αυτά αναφέρουν το αλφαριθμητικό M-SEARCH. Θα δεις αιτήσεις από το μηχάνημά σου (192.168.1.χχχ) προς 255.255.255.0 (broadcast στο δίκτυο για όποια συσκευή υποστηρίζει, για να απαντήσει).
1. Αν δεις τέτοια πακέτα, τότε το gupnp-universal-cp δουλεύει.
1β. Μπορείς να δεις το περιεχόμενο του πακέτου M-SEARCH για να εντοπίσεις αν πράγματι υπάρχει αναφορά για "User-Agent" (δεν πρέπει να υπάρχει διότι το βγάλαμε).
2. Μπορείς να επιβεβαιώσεις αν το ST585 απαντάει στις αιτήσεις αυτές.