Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Bibliothèque dynamique et ordre de préférence (ld.so, GCC 3.4)

2 réponses
Avatar
Frédéric BISSON
Hello tout le monde !

Est-il possible de forcer l'ordre de recherche de ld.so ?

Je m'explique :
J'ai compilé et installé GCC 3.4 dans /usr/local
Les bibliothèques à jour sont donc dans /usr/local/lib

En compilant des programmes (python 2.3.4 par exemple), j'obtenais
le message libstdc++.so.6 cannot open shared object file

J'ai donc mis à jour /etc/ld.so.conf en ajoutant /usr/local/lib en tête et
lancé ldconfig.

Le message n'apparaissait plus mais était remplacé par celui-ci :
/lib/libgcc_s.so.1: version `GCC_3.3' not found (required by
/usr/local/lib/libstdc++.so.6)

Il existe une ancienne version de libgcc_s.so.1 dans /lib alors que la
nouvelle version se trouve dans /usr/local/lib.

En retirant la bibliothèque de /lib et en relançant ldconfig, je peux
lancer l'interprêteur python.

Cette solution, bien qu'efficace, ne me plaît guère. Il semble que ld.so
cherche d'abord les bibliothèques dans /lib puis dans les autres
répertoires à moins que LD_LIBRARY_PATH soit là pour le rappeler à
l'ordre. Mais je n'aime pas non plus la solution du LD_LIBRARY_PATH.

J'aimerais que ld.so prennent d'abord en considération /usr/local/lib et
ensuite /lib

Si quelqu'un a une solution...

Merci

Frédéric

2 réponses

Avatar
no_spam
On Sat, 12 Jun 2004 17:51:03 +0200, Frédéric BISSON wrote:

Hello tout le monde !

Est-il possible de forcer l'ordre de recherche de ld.so ?

Je m'explique :
J'ai compilé et installé GCC 3.4 dans /usr/local
Les bibliothèques à jour sont donc dans /usr/local/lib

En compilant des programmes (python 2.3.4 par exemple), j'obtenais
le message libstdc++.so.6 cannot open shared object file



Tu n'as sans doute pas installé gcc suivant la méthode préconisée.
Si c'était le cas, il mettrait dans les executables qu'il compile
le répertoire ou chercher la libgcc.
Celle-ci n'est censé se trouver ni dans /lib, ni dans /usr/lib
ni dans /usr/local/lib mais dans le répertoire d'installation de gcc.
C'est le seul moyen pour pouvoir faire cohabiter plusieurs versions
de gcc (versions et/ou architectures différentes).
Par exemple, chez moi:
gcc 64 bits:
/usr/lib/gcc-lib/x86_64-linux-gnu/3.3.3/libgcc_s.so
gcc 32 bits:
/emul/linux/x86/root/usr/lib/gcc-lib/i686-pc-linux-gnu/3.3.3/libgcc_s.so
gcc 2.95.3 32 bits pour m68k:
/emul/linux/x86/root/usr/local/lib/gcc-lib/m68k-unknown-linux-gnu/2.95.3/libgcc.a
gcc 3.3.1 32 bits pour m68k:
/emul/linux/x86/root/usr/local/lib/gcc-lib/m68k-unknown-linux-gnu/3.3.1/libgcc.a
gcc 2.95.3 32 bits pour powerpc:
/emul/linux/x86/root/usr/local/lib/gcc-lib/powerpc-unknown-linux-gnu/2.95.3/libgcc.a
gcc 3.3.1 32 bits pour powerpc:
/emul/linux/x86/root/usr/local/lib/gcc-lib/powerpc-unknown-linux-gnu/3.3.1/libgcc.a
...

Si tu installes gcc correctement, tu n'auras plus de problème.

Avatar
Frédéric BISSON
Si tu installes gcc correctement, tu n'auras plus de problème.
Merci :)


Frédéric