Topic: Erreur de chargement oci8

Bonjour,

Après avoir installé le client 11g, et après avoir bien rensigné LD_LIBRARY_PATH, le service apache n'arrive toujours pas a charger oci8.so "libclntsh.so.11.1: cannot open shared object file: No such file or directory in Unknown on line 0", quelqu'un aurait il une idée? Merci.

Re: Erreur de chargement oci8

Quel est le chemin du libclntsh.so.11.1 ?

locate libclntsh.so.11.1

Que contient le fichier /etc/sysconfig/httpd ?

+

Laptop:  Fedora 38 + rpmfusion + remi (SCL only)
x86_64 builder: Fedora 39 + rpmfusion + remi-test
aarch64 builder: RHEL 9 with EPEL
Hosting Server: CentOS 8 Stream with EPEL, rpmfusion, remi

Re: Erreur de chargement oci8

Résolu.
Il suffisait effectivement de mettre LD_LIBRARY_PATH dans le fichier /etc/sysconfig/httpd.

Encore merci.

4 (edited by Frosty 2009-09-01 08:32:57)

Re: Erreur de chargement oci8

Je suis tombé sur un problème tout à fait similaire, que je ne parviens pas à résoudre pour le moment...

Lorsque j'essaie de me servir de PHP en ligne de commande, ou au démarrage d'Apache dans le error_log, j'obtiens :

PHP Warning:  PHP Startup: Unable to load dynamic library '/usr/lib64/php/modules/oci8.so' - libclntsh.so.11.1: cannot open shared object file: No such file or directory in Unknown on line 0
PHP Warning:  PHP Startup: Unable to load dynamic library '/usr/lib64/php/modules/pdo_oci.so' - libclntsh.so.11.1: cannot open shared object file: No such file or directory in Unknown on line 0
PHP Fatal error:  Call to undefined function oci_connect() in /var/www/html/test.php on line 14

Infos système :
CentOS release 5.3, 64 bits
PHP 5.3.0
Apache 2.2.3

uname -a donne :

Linux .............. 2.6.18-128.7.1.el5xen #1 SMP Mon Aug 24 09:14:33 EDT 2009 x86_64 x86_64 x86_64 GNU/Linux

J'ai essayé en installant oracle-instantclient-basic-10.2.0.3-1.x86_64.rpm comme indiqué ici
=> dans /etc/sysconfig/httpd j'ai bien rajouté export LD_LIBRARY_PATH=/usr/lib/oracle/10.2.0.3/client/lib

Puis voyant le message d'erreur (libclntsh.so.11.1: cannot open shared object file), j'ai essayé en installant l'instant client 11.1 oracle-instantclient11.1-basic-11.1.0.7.0-1.x86_64.rpm
=> dans /etc/sysconfig/httpd j'ai mis export LD_LIBRARY_PATH=/usr/lib/oracle/11.1/client64/lib

Résultat : pour le moment, j'obtiens toujours la même erreur.
Je vais tenter de désinstaller puis réinstaller php-oci pour voir...

S'il y a une manip / erreur évidente que je n'ai pas vue, merci de me l'indiquer.

5 (edited by Frosty 2009-09-01 09:32:12)

Re: Erreur de chargement oci8

Quelques indications appportées par un collègue expérimenté ont permis de résoudre le problème :

- Ajouter dans le fichier /etc/ld.so.conf.d/oracle-instantclient11.1-basic-11.1.conf une ligne contenant /usr/lib/oracle/11.1/client64/lib/

- Regénérer le cache de ld avec la commande ldconfig.

- Pour SELinux, on peut aussi changer SELINUX=enforcing en SELINUX=permissive dans le fichier /etc/sysconfig/selinux (=> désactivation permanente)

En fait il semble que le principal problème venait de SELinux qui avait été réactivé suite à un redémarrage.

Re: Erreur de chargement oci8

Normalement la solution du /etc/sysconfig/httpd fonctionne.

La solution du ld.so.conf.d est celle que j'utilise quand je construit mes propres RPM du client oracle (je trouve ceux d'Oracle trop moches).

Et effectivement SELinux bloque le chargement des bibliothèques. Il est possible de conserver SElinux en modifiant quelques règles (faudrait rechercher un peu, mais l'audit contient la solution normalement)

+

Laptop:  Fedora 38 + rpmfusion + remi (SCL only)
x86_64 builder: Fedora 39 + rpmfusion + remi-test
aarch64 builder: RHEL 9 with EPEL
Hosting Server: CentOS 8 Stream with EPEL, rpmfusion, remi

Re: Erreur de chargement oci8

Merci pour ces précisions smile

Re: Erreur de chargement oci8

Petite précision supplémentaire pour rajouter le LD_LIBRARY_PATH dans /etc/sysconfig/httpd

Il est certainement préférable de faire :

LD_LIBRARY_PATH=/usr/lib/oracle/11.2/client64/lib:${LD_LIBRARY_PATH}
export LD_LIBRARY_PATH

plutôt que :

LD_LIBRARY_PATH=/usr/lib/oracle/11.2/client64/lib

pour reprendre les éventuels chemins existants déjà définis dans LD_LIBRARY_PATH.