2015-03-29 8 views
11

Moim celem jest połączenie z bazą danych Oracle na komputerze gościa VMWare (OpenSuse) z Ubuntu.libclntsh.so.12.1: nie można otworzyć błędu pliku współdzielonego podczas uruchamiania próbki węzła-oracledb

Na razie zainstalowałem tylko sterownik oracledb i próbowałem uruchomić podany example connect program.

Kroki, które obserwuję, pochodzą ze strony github INSTALL. To, co zrobiłem do tej pory, to:

1) Ponieważ mam już zainstalowany node.js, pominąłem step 3.1.

2) I został pobrany i ekstrahuje się podstawową i sdk jak opisane w step 3.2.

3) Ponieważ nie mogłem znaleźć żadnej paczki o nazwie libaio, ale znalazłem libaio1. Więc zainstalowałem libaio1.

4) Utworzono zmienną środowiskową LD_LIBRARY_PATH, a jej zawartość na moim komputerze to /opt/oracle/instantclient.

5) Jak wspomniano w step 3.3; mimo że nie było to obowiązkowe w moim przypadku; Zrobiłem dwie zmienne środowiskowe: OCI_LIB_DIR z zawartością /opt/oracle/instantclient i OCI_INC_DIR z zawartością /opt/oracle/instantclient/sdk/include.

6) Zainstalowany node-oracledb.

Próbuję uruchomić przykład połączenia programu. Kod, którego używam, jest tutaj https://github.com/ishanatmuz/oracle-test. Po uruchomieniu node connect.js otrzymuję ten błąd.

/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) 

Ponieważ nie uruchomiłem jeszcze komputera gościa VMware; Miałem nadzieję, że wystąpi błąd związany z brakiem takiej instancji bazy danych. A następnie dopiero po tym uruchom maszynę VMWare i połącz się z bazą danych wewnątrz niej. Ale zamiast tego otrzymuję błąd cannot open shared object file dla libclntsh.so.12.1.

Odpowiedz

12

Moje pierwsze podejrzenie byłoby takie, że LD_LIBRARY_PATH nie jest właściwie ustawione lub wyeksportowane poprawnie. Potrójnie sprawdź, czy jest ustawiony i katalog jest odczytywalny przez rzeczywistą powłokę, która próbuje uruchomić węzeł.

Sprawdziłbym również, jakie inne biblioteki Oracle są zainstalowane na komputerze.

Aktualizacja: należy pamiętać, że używanie ldconfig może być łatwiejsze niż ustawienie LD_LIBRARY_PATH w systemie Linux. Możesz zrobić coś w rodzaju:

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

Szczegółowe informacje można znaleźć w instrukcjach Instant Client install.

+0

przykro mi.Nie przyjąłem twojej odpowiedzi. To był naprawdę problem. Zrobiłem to trochę wcześniej niż twoja odpowiedź. Zapomniałem zaakceptować to jako rozwiązanie. Przepraszam, że musiał pan czekać. – Ishan

5

eksport działa tylko dla jednego procesu. Wygląda na to, że nie pojawia się w twoim oknie terminala (jest to oddzielny proces). Tak, należy wykonać następujące ponownie przed rozpoczęciem node connect.js (w tym samym oknie terminala, w którym zamierza rozpocząć węzła):

export LD_LIBRARY_PATH=/opt/oracle/instantclient:$LD_LIBRARY_PATH 
+0

jak to zrobić na stałe? – Zolbayar

Powiązane problemy