【问题标题】:libclntsh.so.12.1 : cannot open shared object file error when running sample of node-oracledblibclntsh.so.12.1 : 运行 node-oracledb 示例时无法打开共享对象文件错误
【发布时间】:2015-06-02 13:28:17
【问题描述】:

我的目标是从 Ubuntu 连接到 VMWare 客户机 (OpenSuse) 上的 Oracle 数据库。

目前我只安装了oracledb 驱动程序,并试图运行给定的example connect program

我所遵循的步骤来自 github INSTALL 页面。到目前为止我所做的是这些:

1) 因为我已经安装了 node.js,所以我跳过了step 3.1

2) 我已经成功下载并解压了step 3.2 中提到的basicsdk

3) 因为我找不到任何名为 libaio 的包,但我确实找到了 libaio1。所以我安装了libaio1

4) 我创建了环境变量LD_LIBRARY_PATH,它在我的电脑上的内容是/opt/oracle/instantclient

5) 如step 3.3 所述;即使在我的情况下这不是强制性的;我创建了两个环境变量:OCI_LIB_DIR,内容为 /opt/oracle/instantclientOCI_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

【问题讨论】:

    标签: node.js oracle node-oracledb


    【解决方案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 说明。

    如果您有可选的网络配置文件,如sqlnet.oratnsnames.ora,可以将它们放在目录/opt/oracle/instantclient_12_2/network/admin 中,这是配置文件的默认位置。见Optional Oracle Net Configuration

    更新:如果您安装 Instant Client 19.3 RPM 软件包,ldconfig 步骤将自动完成。 (对于 19.3 ZIP 文件安装,您仍然需要/可以/应该这样做)

    Instant Client 19 将连接到 Oracle Database 11.2 或更高版本,因此除非您对旧版本有特殊要求,否则请使用 Instant Client 19。

    【讨论】:

    • 对不起。我没有接受你的回答。这确实是问题所在。我确实比你的回答早了一点。忘记接受这个作为解决方案。抱歉让您久等了。
    【解决方案2】:

    export 仅适用于一个进程。看来,它不会出现在您的终端窗口中(它是单独的过程)。 因此,您应该在启动 node connect.js 之前再次执行以下操作(在您要启动节点的同一终端窗口中):

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

    【讨论】:

    • @Zolbayar:要使其永久化,您可以将其添加到 ~/.profile 或 ~/.bashrc
    猜你喜欢
    • 2011-02-12
    • 1970-01-01
    • 2014-01-07
    • 1970-01-01
    • 2021-12-28
    • 2019-01-30
    • 2016-04-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多