libclntsh.so.12.1 : 运行 node-oracledb 示例时无法打开共享对象文件错误
libclntsh.so.12.1 : cannot open shared object file error when running sample of node-oracledb
我的目标是从 Ubuntu.
连接到 VMWare 来宾计算机 (OpenSuse) 上的 oracle 数据库
目前我只安装了给定的 oracledb driver, and was trying to run the example connect program。
我遵循的步骤来自 github INSTALL 页面。到目前为止我所做的是这些:
1) 因为我已经安装了 node.js 我跳过了 step 3.1.
2) 我已经成功下载并解压了 basic 和 sdk如step 3.2.
所述
3) 因为我找不到任何名为 libaio
的包,但我确实找到了 libaio1
。所以我安装了 libaio1
.
4) 我设置了环境变量LD_LIBRARY_PATH
,我电脑上的内容是/opt/oracle/instantclient
.
5) 如step 3.3所述;即使在我的情况下这不是强制性的;我制作了两个环境变量:OCI_LIB_DIR
内容为 /opt/oracle/instantclient
和 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
for libclntsh.so.12.1
.
的错误
我的第一个怀疑是 LD_LIBRARY_PATH 实际上没有正确设置或导出。三次检查它是否已设置并且该目录可由尝试启动节点的实际 shell 读取。
export LD_LIBRARY_PATH=/opt/oracle/instantclient_12_2
您需要在 Node.js 开始的任何 shell 中执行此操作。
我还会检查机器上还安装了哪些其他 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 install 说明。
如果您有可选的 Net 配置文件,如 sqlnet.ora
或 tnsnames.ora
,可以将它们放在目录 /opt/oracle/instantclient_12_2/network/admin
中,这是配置文件的默认位置。参见 Optional Oracle Net Configuration。
更新:如果您安装 Instant Client 19.3 RPM 软件包,ldconfig
步骤会自动完成。 (对于 19.3 ZIP 文件安装,您仍然 need/could/should 这样做)
Instant Client 19 将连接到 Oracle Database 11.2 或更高版本,因此请使用 Instant Client 19,除非您对旧版本有特殊要求。
导出仅适用于一个进程。看起来,它没有出现在您的终端 window (这是单独的过程)。
因此,您应该在启动 node connect.js
之前再次执行以下操作(在您要启动节点的同一终端 window 中):
export LD_LIBRARY_PATH=/opt/oracle/instantclient:$LD_LIBRARY_PATH
我的目标是从 Ubuntu.
连接到 VMWare 来宾计算机 (OpenSuse) 上的 oracle 数据库目前我只安装了给定的 oracledb driver, and was trying to run the example connect program。
我遵循的步骤来自 github INSTALL 页面。到目前为止我所做的是这些:
1) 因为我已经安装了 node.js 我跳过了 step 3.1.
2) 我已经成功下载并解压了 basic 和 sdk如step 3.2.
所述3) 因为我找不到任何名为 libaio
的包,但我确实找到了 libaio1
。所以我安装了 libaio1
.
4) 我设置了环境变量LD_LIBRARY_PATH
,我电脑上的内容是/opt/oracle/instantclient
.
5) 如step 3.3所述;即使在我的情况下这不是强制性的;我制作了两个环境变量:OCI_LIB_DIR
内容为 /opt/oracle/instantclient
和 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
for libclntsh.so.12.1
.
我的第一个怀疑是 LD_LIBRARY_PATH 实际上没有正确设置或导出。三次检查它是否已设置并且该目录可由尝试启动节点的实际 shell 读取。
export LD_LIBRARY_PATH=/opt/oracle/instantclient_12_2
您需要在 Node.js 开始的任何 shell 中执行此操作。
我还会检查机器上还安装了哪些其他 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 install 说明。
如果您有可选的 Net 配置文件,如 sqlnet.ora
或 tnsnames.ora
,可以将它们放在目录 /opt/oracle/instantclient_12_2/network/admin
中,这是配置文件的默认位置。参见 Optional Oracle Net Configuration。
更新:如果您安装 Instant Client 19.3 RPM 软件包,ldconfig
步骤会自动完成。 (对于 19.3 ZIP 文件安装,您仍然 need/could/should 这样做)
Instant Client 19 将连接到 Oracle Database 11.2 或更高版本,因此请使用 Instant Client 19,除非您对旧版本有特殊要求。
导出仅适用于一个进程。看起来,它没有出现在您的终端 window (这是单独的过程)。
因此,您应该在启动 node connect.js
之前再次执行以下操作(在您要启动节点的同一终端 window 中):
export LD_LIBRARY_PATH=/opt/oracle/instantclient:$LD_LIBRARY_PATH