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

Theodoros V. Kalamatianos thkala at softlab.ece.ntua.gr
Fri May 5 21:45:41 EEST 2006


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 του προγράμματος, αλλά δεν ελέγχει 
αναδρομικά και όλες τις βιβλιοθήκες...


More information about the Linux-greek-users mailing list