Re: dlopen e RTLD_DEEPBIND

Giovanni <[email protected]> Wed, 7 Oct 2015 15:19:46 +0300
Newsgroups gmane.os.freebsd.italian.esperti
Message-ID <CAK3jXTWOQcFwoYOYB+iaE+NwZyMiNR9gkiJjZxux71CuVebxWw@mail.gmail.com>
Salve a tutti,

Se puo' essere d'aiuto, come spiegato qui
http://stackoverflow.com/questions/6940384/how-to-deal-with-symbol-collisions-between-statically-linked-libraries
,
si potrebbe usare objcopy (
http://www.freebsd.org/cgi/man.cgi?query=objcopy&sektion=1&apropos=0&manpath=FreeBSD%2B10.0-RELEASE)
su entrambi i .o delle librerie statiche in questo modo:

$ objcopy --prefix-symbols=mysql_ some_libmysql_object.o

$ objcopy --prefix-symbols=pg_ some_libpostgres_object.o

quindi chiamando nm su i due .o dovresti vedere mysql_malloc e pg_malloc

ma questo richiedebbe decomprimere la libreria statica, chiamare
objcopy, ricomprimerla. Non so cosa succederebbe in caso di chiamate
alla funzione originale da parte della libreria stessa.

Giovanni


Il giorno 7 ottobre 2015 14:56, Ferruccio Zamuner <[email protected]> ha
scritto:

> Ciao Gianluca,
>
> se ho ben capito dici di creare due wrapper, ciascuno che linka in modo
> statico la propria libreria e disambigua i nomi delle funzioni (o
> genericamente simboli).
> Quindi adattare il codice dell'estensione del postgresql in modo da non
> usare i nomi ambigui ma quelli disambiguati dai wrapper.
>
> Beh, si', sembra che potrebbe funzionare.
>
> Mi e' sfuggito qualcosa?
>
>
> Ciao,                       \ferz
>
>
> On 07/10/2015 13:41, Gianluca Sordiglioni wrote:
>
>> È un problema mica da ridere. Potresti fare un file che funge da
>> collante, in glue.h dove per ogni funzione duplicata ne crei una nuova con
>> altro nome la quale semplicemente richiama l'altra funzione; ad esempio
>> newmalloc richiama malloc. Non so come si comporterebbe il linker visto che
>> avresti comunque i simboli duplicati.
>> Forse potresti creare un altro progetto con una dynlib in modo che sia
>> autocontenuta: ma sempre a patto di avere il controllo del codice, caricare
>> la dynlib e specificare la newmalloc invece di malloc.
>> Non mi viene in mente altro per aiutarti.
>>
>> Gianluca
>>
>
> _______________________________________________
> Esperti mailing list
> [email protected]
> http://mailman.gufi.org/mailman/listinfo/esperti
>

_______________________________________________
Esperti mailing list
[email protected]
http://mailman.gufi.org/mailman/listinfo/esperti