ho scritto un oggetto condiviso che modifica gli argomenti per FT_Load_Glyph
e FT_Render_Glyph
funzioni di FreeType, attualmente interponendo con LD_PRELOAD
e dlsym
.interposizione parte di un oggetto condiviso da soname
Questo funziona bene, ma io sono curioso di sapere se c'è un modo per rendere questi cambiamenti:
- a tutti i programmi che utilizzano FreeType su un dato host (in esecuzione per esempio Debian);
- senza sovrascrivere alcun programma che non sia effettivamente collegato a FreeType;
- senza applicare semplicemente uno
LD_PRELOAD
a tutti i programmi sull'host; - senza richiedere alcuna manutenzione, a meno che il soname di FreeType non venga modificato; e
- senza modificare alcun file di FreeType, né quelli di alcun programma sull'host.
Le uniche due “soluzioni” che sono stato in grado di elaborare sono brutti hack:
- a
LD_PRELOAD
tutti i programmi, tutto il tempo, che sembra lento e fragile; oppure - da copiare ad es.
libfreetype.so.6.12.3
alibxxxxtype.so.6.12.3
; quindi- patch il soname in
libxxxxtype.so.6.12.3
alibxxxxtype.so.6
; - collega l'oggetto condiviso di interposizione allo
libxxxxtype.so.6
; e - installa l'oggetto condiviso come ad es.
libfreetype.so.6.999
.
- patch il soname in
avrei essenzialmente piace di patch trasparente una coppia di funzioni in un oggetto condiviso, pur lasciando le rimanenti funzioni attraverso, senza dover necessariamente accesso alla fonte dell'oggetto condiviso o programmi che lo utilizzano , ma se faccio un oggetto condiviso falso con il soname libfreetype.so.6
, non riesco a vedere un modo pulito per collegarlo a (o dlopen
) il vero libfreetype.so.6
.
Questo è il mio primo vero esperimento con le librerie condivise, quindi per favore portatemi se questa domanda fa alcune ipotesi sbagliate, o semplicemente non ha senso.
La soluzione basata sulla ridenominazione di 'libfreetype.so.x.y.z' sembra essere il modo giusto per farlo. Perché lo descrivi come brutto? – Leon
Penso che le mie ragioni fossero (a) avrei dovuto mantenere una copia del vero 'libfreetype.so' che aveva un soname patchato, specialmente tenendolo aggiornato quando una nuova (o la stessa) versione di' libfreetype6' il pacchetto è installato, e (b) vorrei inquinare il "spazio dei nomi" globale con un 'libxxxxtype.so', che è almeno teoricamente fragile perché sarebbe impossibile trovare un nome che nessun autore di librerie avrebbe mai usato . (a) è mitigato dalla risposta di glorpen (in cambio di affidarsi a un percorso assoluto), e (b) può essere mitigato al punto in cui è solo teorico. –