Re: Dynamic link indépendamment de la version

Pàgina inicial

Reply to this message
Autor: Nicolas Morey-Chaisemartin
Data:  
A: guilde
Assumpte: Re: Dynamic link indépendamment de la version
Salut,

Normalement le numéro de version n'apparait jamais dans la lib !
Tu devrais avoir libdb_cxx.so qui pointe sur libdb_cxx.so.4 qui pointe sur libdb_cxx.so.4.3

Exemple:
-rwxr-xr-x 1 root root 1273480 Jun 7 2009 /usr/local/lib/libsqlite3.so*
-rwxr-xr-x 1 root root 1273480 Jun 7 2009 /usr/local/lib/libsqlite3.so.0*
-rwxr-xr-x 1 root root 1273480 Jun 7 2009 /usr/local/lib/libsqlite3.so.0.8.6*

Et du coup ldd me donne:
libsqlite3.so.0 => /usr/lib/libsqlite3.so.0

Es tu sur que les lib sont compatibles?
Et normalement oui, c'est le fonctionnement par défaut.
Mais je connais quelques libs genre libxml2 qui sont un peu tatillon la dessus et font des checks au runtime pour vérifier la compat des versions

Nicolas

On 06/05/2010 11:22, JM Coursimault wrote:

> Hello folks,
>
> Je cherche à faire une librarie dynamique (disons mylib.so) qui elle
> même utilise des librairies dynamiques (disons libdb_cxx, la lib de
> BerkeleyDB), de facon indépendante de la version présente a l'exécution.
> Je ne souhaite pas linker en statique.
>
> En d'autres termes, si je compile sur une machine qui a db4 version 4.3,
> je m'attends a ce que ma lib fonctionne aussi sur une machine qui a db4
> version 4.7, les deux étant compatibles ascendantes.
> Ca me semblait le fonctionnement par défaut.
>
> Je passe donc l'option -ldb_cxx lors du link (et pas -ldb_cxx-4.3)
> Il existe bien un lien symbolique /usr/lib/libdb_cxx sur les deux
> machines, qui pointe bien vers des libs respectivement 4.3 et 4.7.
>
> Sur la machine ou je compile, ca fonctionne :
> ldd mylib.so me dit
> [...]
>        libdb_cxx-4.3.so => /usr/lib/libdb_cxx-4.3.so (0x00118000)

>
> Je me serais attendu à
>        libdb_cxx.so => /usr/lib/libdb_cxx-4.3.so (0x00118000)

>
>
> Si je fais le ldd exactement sur la même lib depuis une autre machine,
> ça me dit :
> [...]
>         libdb_cxx-4.3.so => not found

>
> Ce qui m'étonne, c'est que le linker cherche la même lib qu'à la
> compilation, avec le numéro de version. Et donc il ne peut pas la
> trouver, car sur cette machine la seule lib est la 4.7 :
>
> /usr/lib/libdb_cxx.so -> libdb_cxx-4.7.so
>
> Je me serais attendu à
>         libdb_cxx.so => /usr/lib/libdb_cxx-4.7.so

>
> Pour info, $LD_LIBRARY_PATH est vide dans les deux cas.
>
>
> J'ai joué avec les options -dynamic et -static du linker, regardé les
> docs de gcc et ld toute la journée, que dalle.
>
> Any hints ?
>
>
> Merci
> -- Jean Marc
>
>
>