Bonjour,
cela fait quelques heures que j'essaie de résoudre le problème suivant et je ne m'en sort pas:
- je travaille sur une application qui utilise les OCI Oracle
- elle est linkée dynamiquement avec la librairie Oracle : libclntsh.so.11.1 (Oracle 11.2.0.1.0)
- les options de link sont: -static-libgcc -lm -lnsl -ldl -L$ORACLE_HOME/lib -lclntsh
- je n'ai aucune erreur "unresolve external" au link
Par contre, quand j'exécute le programme, j'ai l'erreur suivante:
error while loading shared libraries: libclntsh.so.11.1: cannot open shared object file: No such file or directory
alors que la variable LD_LIBRARY_PATH est bien positionnée et bien utilisée au link (sinon, j'aurai un "unresolve external" pour chaque oci utilisée).
Tout ce passe comme si au moment du chargement du programme, la variable LD_LIBRARY_PATH n'était pas utilisée.
En positionnant la variable LD_DEBUG=libs, j'ai le résultat suivant:
5687: find library=libm.so.6 [0]; searching
5687: search cache=/etc/ld.so.cache
5687: trying file=/lib64/libm.so.6
5687:
5687: find library=libnsl.so.1 [0]; searching
5687: search cache=/etc/ld.so.cache
5687: trying file=/lib64/libnsl.so.1
5687:
5687: find library=libdl.so.2 [0]; searching
5687: search cache=/etc/ld.so.cache
5687: trying file=/lib64/libdl.so.2
5687:
5687: find library=libclntsh.so.11.1 [0]; searching
5687: search cache=/etc/ld.so.cache
5687: search path=/lib64/tls/x86_64:/lib64/tls:/lib64/x86_64:/lib64:/usr/lib64/tls/x86_64:/usr/lib64/tls:/usr/lib64/x86_64:/usr/lib64 (system search path)
5687: trying file=/lib64/tls/x86_64/libclntsh.so.11.1
5687: trying file=/lib64/tls/libclntsh.so.11.1
5687: trying file=/lib64/x86_64/libclntsh.so.11.1
5687: trying file=/lib64/libclntsh.so.11.1
5687: trying file=/usr/lib64/tls/x86_64/libclntsh.so.11.1
5687: trying file=/usr/lib64/tls/libclntsh.so.11.1
5687: trying file=/usr/lib64/x86_64/libclntsh.so.11.1
5687: trying file=/usr/lib64/libclntsh.so.11.1
5687:
askdd64: error while loading shared libraries: libclntsh.so.11.1: cannot open shared object file: No such file or directory
En faisant une recherche, le seul cas que j'ai trouvé où LD_LIBRARY_PATH est ignoré est quand l'exécutable a le setuid bit positionné. Ce n'est pas le cas.
J'ai vérifié les droits de mon user sur la librairie et la compatibilité du programme avec la librairie:
ORCL-[/home/ask/cask/pub64]file $LD_LIBRARY_PATH/libclntsh.so.11.1
/home/oracle/app/oracle/product/11.2.0/dbhome_1/lib/libclntsh.so.11.1: ELF 64-bit LSB shared object, AMD x86-64, version 1 (SYSV), not stripped
ORCL-[/home/ask/cask/pub64]file askdd64
askdd64: ELF 64-bit LSB executable, AMD x86-64, version 1 (SYSV), for GNU/Linux 2.6.9, dynamically linked (uses shared libs), for GNU/Linux 2.6.9, not stripped
O
Je travaille sur une machine virtuelle CentOs 5.4 contenue dans un serveur Xen.
Le script de compilation fonctionne depuis longtemps sur d'autres OS: HP-UX, Solaris, Linux Red Hat, ...
C'est la première fois que je rencontre ce problème.
Si quelqu'un a une idée, merci d'avance.
Partager