web-dev-qa-db-fra.com

libclntsh.so.12.1: impossible d'ouvrir une erreur de fichier d'objet partagé lors de l'exécution d'un échantillon de node-oracledb

Mon objectif est de me connecter à une base de données Oracle sur une machine invitée VMWare (OpenSuse) d'Ubuntu.

Pour l'instant, je n'ai installé que le pilote oracledb , et j'essayais d'exécuter exemple de programme de connexion donné.

Les étapes que je suis viennent de la page github INSTALL . Ce que j'ai fait jusqu'à présent sont les suivants:

1) Étant donné que node.js est déjà installé, j'ai ignoré étape 3.1 .

2) J'ai téléchargé et extrait avec succès le basique et sdk comme mentionné dans étape 3.2 .

3) Comme je n'ai trouvé aucun paquet nommé libaio mais j'ai trouvé libaio1. J'ai donc installé libaio1.

4) J'ai fait la variable d'environnement LD_LIBRARY_PATH et son contenu sur mon PC est /opt/Oracle/instantclient.

5) Comme mentionné dans étape 3. ; même si ce n'était pas obligatoire dans mon cas; J'ai fait deux variables d'environnement: OCI_LIB_DIR avec contenu /opt/Oracle/instantclient et OCI_INC_DIR avec contenu /opt/Oracle/instantclient/sdk/include.

6) Installé node-oracledb.

J'essaie d'exécuter l'exemple de programme de connexion. Le code que j'utilise est ici https://github.com/ishanatmuz/Oracle-test . Quand je lance node connect.js Je reçois cette erreur.

/home/ishan/node.js/Oracle-test/node_modules/oracledb/lib/oracledb.js:28
throw err;
          ^
Error: libclntsh.so.12.1: cannot open shared object file: No such file or directory
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)
    at Module.require (module.js:364:17)
    at require (module.js:380:17)
    at Object.<anonymous> (/home/ishan/node.js/Oracle-test/node_modules/oracledb/lib/oracledb.js:23:15)
    at Module._compile (module.js:456:26)
    at Object.Module._extensions..js (modullibclntsh.so.12.1e.js:474:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)
    at Module.require (module.js:364:17)

Comme je n'ai pas encore démarré la machine invitée VMware; J'espérais obtenir une erreur concernant aucune telle instance de base de données trouvée. Et puis seulement après cela, exécutez la machine VMWare et connectez-vous à la base de données à l'intérieur. Mais à la place, j'obtiens l'erreur de cannot open shared object file pour libclntsh.so.12.1.

12
Ishan

Mon premier soupçon serait que LD_LIBRARY_PATH n'est pas réellement défini ou exporté correctement. Vérifiez qu'il est défini et que le répertoire est lisible par le shell réel qui tente de démarrer le nœud.

export LD_LIBRARY_PATH=/opt/Oracle/instantclient_12_2

Vous devez le faire dans n'importe quel shell qui démarre Node.js.

Je vérifierais également quelles autres bibliothèques Oracle sont installées sur la machine et m'assurer que vous n'avez pas de conflits.

Utiliser ldconfig pour définir le chemin globalement sera presque certainement plus facile que de définir LD_LIBRARY_PATH. Vous pouvez faire quelque chose comme:

Sudo sh -c "echo /opt/Oracle/instantclient_12_2 > /etc/ld.so.conf.d/Oracle-instantclient.conf"
Sudo ldconfig

Voir les instructions Installation instantanée du client pour plus de détails.

Si vous avez des fichiers de configuration Net facultatifs comme sqlnet.ora ou tnsnames.ora, ils peuvent être placés dans un répertoire /opt/Oracle/instantclient_12_2/network/admin qui est un emplacement par défaut pour les fichiers de configuration. Voir Configuration Oracle Net facultative .

Mise à jour: si vous installez les packages Instant Client 19.3 RPM, l'étape ldconfig est automatiquement effectuée. (Vous avez toujours besoin/pourriez/devriez le faire pour une installation de fichier Zip 19.3)

17
Christopher Jones

l'exportation ne fonctionne que pour un seul processus. Il semble, il ne se présente pas à votre fenêtre de terminal (c'est un processus distinct). Donc, vous devez exécuter à nouveau la suite avant de commencer node connect.js (dans la même fenêtre de terminal où vous allez démarrer le nœud):

export LD_LIBRARY_PATH=/opt/Oracle/instantclient:$LD_LIBRARY_PATH
6
Dmitry