Dynamic link indépendamment de la version

トップ ページ

このメッセージに返信
著者: JM Coursimault
日付:  
To: ML Guilde
題目: Dynamic link indépendamment de la version
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