libclntsh.so.12.1: не удается открыть файл с общим объектным файлом при запуске образца node-oracledb
Моя цель - подключиться к базе данных оракула на гостевой машине VMWare (OpenSuse) из Ubuntu.
На данный момент я установил только драйвер oracledb и пытался запустить приведенную программу подключения.
Шаги, которые я выполняю, приведены на странице INSTALL. Вот что я сделал до сих пор:
1) Так как у меня уже установлен node.js, я пропустил шаг 3.1.
2) Я успешно загрузил и извлек базовый и sdk, как указано в шаге 3.2.
3) Поскольку я не смог найти пакет с именем libaio
но я нашел libaio1
. Поэтому я установил libaio1
.
4) Я сделал переменную окружения LD_LIBRARY_PATH
а ее содержимое на моем ПК - /opt/oracle/instantclient
.
5) Как указано на шаге 3.3; хотя это не было обязательным в моем случае; Я сделал две переменные среды: OCI_LIB_DIR
с содержимым /opt/oracle/instantclient
OCI_INC_DIR
и OCI_INC_DIR
с содержимым /opt/oracle/instantclient/sdk/include
.
6) Установлен node-oracledb
.
Я пытаюсь запустить пример программы подключения. Код, который я использую, находится здесь https://github.com/ishanatmuz/oracle-test. Когда я запускаю node connect.js
я получаю эту ошибку.
/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)
Поскольку я еще не запускал гостевую машину VMware; Я надеялся получить ошибку относительно того, что такой экземпляр базы данных не найден. И затем только после этого запустите машину VMWare и подключитесь к базе данных внутри нее. Но вместо этого я получаю ошибку, cannot open shared object file
для libclntsh.so.12.1
.
Ответы
Ответ 1
Моим первым подозрением будет то, что LD_LIBRARY_PATH на самом деле не установлен или не экспортирован правильно. Тройная проверка установлена, и каталог читается фактической оболочкой, которая пытается запустить узел.
export LD_LIBRARY_PATH=/opt/oracle/instantclient_12_2
Вы должны сделать это в любой оболочке, которая запускает Node.js.
Я также проверил, какие другие библиотеки Oracle установлены на машине, и убедился, что у вас нет конфликтов.
Использование ldconfig для глобальной установки пути почти наверняка будет проще, чем установка LD_LIBRARY_PATH. Вы можете сделать что-то вроде:
sudo sh -c "echo /opt/oracle/instantclient_12_2 > /etc/ld.so.conf.d/oracle-instantclient.conf"
sudo ldconfig
Подробнее см. Инструкции по установке Instant Client.
Если у вас есть дополнительные файлы конфигурации Net, такие как sqlnet.ora
или tnsnames.ora
, они могут быть помещены в каталог /opt/oracle/instantclient_12_2/network/admin
который является местоположением по умолчанию для файлов конфигурации. См. Дополнительную конфигурацию Oracle Net.
Обновление: если вы устанавливаете RPM-пакеты Instant Client 19.3, шаг ldconfig
выполняется автоматически. (Вам все еще нужно/можно/нужно сделать это для установки файла ZIP размером 19,3)
Ответ 2
экспорт работает только для одного процесса. Кажется, он не присутствует в вашем окне терминала (это отдельный процесс). Итак, перед запуском node connect.js
(в том же окне терминала, где вы собираетесь запускать узел), вы должны выполнить следующую команду:
export LD_LIBRARY_PATH=/opt/oracle/instantclient:$LD_LIBRARY_PATH