Σχετικά με το LD_PRELOAD

Raoul raoul at raoul.shacknet.nu
Sat May 6 01:53:28 EEST 2006


On Fri, 2006-05-05 at 21:45 +0300, Theodoros V. Kalamatianos wrote:
> On Fri, 5 May 2006, Panagiotis Atmatzidis wrote:
> 
> > Raoul wrote:
> >> On Fri, 2006-05-05 at 15:22 +0300, Emm Vasilakis wrote:
> >>> On Παρ, 2006-05-05 at 13:36 +0300, Raoul wrote:
> >>>> Μπορεί κάποιος να μου εξηγήσει με δυο λόγια τι ακριβώς κάνει το
> >>>> LD_PRELOAD?
> >>>>
> >>>> Για παράδειγμα, κάποιο πρόγραμμα, αν το τρέξει κανείς κατευθείαν:
> >>>>
> >>>> # ./someprogram
> >>>>
> >>>> ...δεν τρέχει επειδή δεν μπορεί να βρει μια βιβλιοθήκη πχ
> >>>> libsomething.so.0
> >>>> Αν το τρέξει:
> >>>>
> >>>> # LD_PRELOAD=/usr/lib/libsomething.so.0 ./someprogram
> >>>>
> >>>> ...τότε λειτουργεί.
> >>>>
> >>>> Εφόσον μια βιβλιοθήκη έχει εγκατασταθεί στο /usr/lib/ και έχει τρέξει το
> >>>> ldconfig, πώς είναι δυνατόν να μην τη βρίσκει το πρόγραμμα?
> >>>>
> >>> To ldd ./someprogram ti leei?
> >>>
> >>
> >> Αυτό είναι το output. Η libsomething που γράφω παραπάνω είναι η /usr/lib/libalut.so.0
> >>
> >>         linux-gate.so.1 =>  (0x00785000)
> ...
> >>         /lib/ld-linux.so.2 (0x00786000)
> >>
> >> Δεν βλέπω πουθενά libalut
> ...
> >
> > Στο manpage λέει ότι δεν χρειάζεται αλλά δοκίμασε να βάλεις το path στο
> > /etc/ld.so.conf μήπως και το δεί το ldconfig.
> 
> Δεν φταίει το σύστημα εδώ. Αυτό που συμβαίνει είναι ότι κάποια από τις 
> βιβλιοθήκες που θέλει το πρόγραμμα έχει εξαρτήσεις στην libalut, αλλά η 
> libalut δεν είναι linked με το πρόγραμμα. Το LD_PRELOAD απλά καλύπτει 
> αυτήν την παράλειψη. Παραδοσιακά ο τρόπος να λύνεις το ζήτημα των 
> εξαρτήσεων είναι να κάνεις link τη shared library με όλες τις εξαρτήσεις 
> της. Τώρα, στην εποχή του libtool και του pkgconfig υπάρχουν πολλοί που 
> θεωρούν ότι αυτό είναι πλεονάζον ή ακόμα και λάθος, αλλά απαιτείται 
> προσοχή από τους application developers για να 'τραβήξουν' όλες τις 
> εξαρτήσεις στο πρόγραμμά τους.
> 
> Ο πιο απλός τρόπος να λυθεί αυτό είναι το συγκεκριμένο πρόγραμμα να γίνει 
> link με την libalut κατά τη μεταγλώττιση. Αν θυμάμαι καλά ο compiler 
> σταματά σε unresolved symbols του προγράμματος, αλλά δεν ελέγχει 
> αναδρομικά και όλες τις βιβλιοθήκες...

Ευχαριστώ όλους για τις απαντήσεις.
Πολλά από αυτά σχετικά με το linking δεν τα ήξερα, οπότε θεωρώ ότι καλώς
ρώτησα σχετικά. Το πρόγραμμα διατίθεται μόνο σε binary μορφή, οπότε δε
νομίζω να μπορώ να κάνω κάτι.
Αρχικά νόμιζα ότι κάτι δεν πήγαινε καλά στο σύστημα, αλλά ολα OK. :)

-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: This is a digitally signed message part
URL: <http://lists.hellug.gr/pipermail/linux-greek-users/attachments/20060506/1fdb3507/attachment.pgp>


More information about the Linux-greek-users mailing list