【问题标题】:libclntsh.so.11.1: cannot open shared object file.libclntsh.so.11.1:无法打开共享对象文件。
【发布时间】:2011-02-12 02:13:45
【问题描述】:

我想通过icrontab在Linux上调度一个任务,该任务是用python编写的,必须导入cx_Oracle模块,所以我在.bash_profile中导出ORACLE_HOMELD_LIBRARY_PATH , 但 它引发了错误:

libclntsh.so.11.1:无法打开共享对象文件。

由于可以通过在 shell 中发出命令来运行任务,例如:

python a.py  # ok

我将 icrontab 中的任务更改为调用我的 Python 脚本的 shell 脚本,但异常再次出现?

# the shell script scheduled in icrontab
#! bash 
python a.py    

你能帮忙解决一下吗?

【问题讨论】:

    标签: oracle shell cron environment-variables


    【解决方案1】:

    您可能想要指定 PATH — 以及 ORACLE_HOMELD_LIBRARY_PATH — 以便 cron(1) 知道在哪里可以找到二进制文件。
    阅读“5 Crontab 环境”here

    【讨论】:

    • 但是我们更新了shell脚本如下:#! /bin/bash echo $ORACLE_HOME echo $LD_LIBRARY_PATH 并将 crontab 的输出重定向到日志文件 为什么找到这些路径并将其写入日志?
    • @zhangzhong 我想你想用export而不是echo?例如。 export ORACLE_HOME=/usr/lib/oracle10/fooexport LD_LIBRARY_PATH=/usr/lib/bar
    【解决方案2】:

    这些库位于 /u01/app/oracle/product/11.2.0/xe/lib(对于 Oracle XE)或类似的。

    您应该将此路径添加到/etc/ld.so.conf,或者如果此文件仅显示包含位置,如在/etc/ld.so.conf.d 目录中的单独文件中

    我在/etc/ld.so.conf.d 中有 oracle.conf,只有一个带有路径的文件。没有别的了。

    当然不要忘记在最后一步运行 ldconfig。

    【讨论】:

    • “oracle.conf”应该写什么内容?
    【解决方案3】:

    Cron 在运行任务时不会加载用户的配置文件,您必须在 shell 脚本中明确包含配置文件。

    Example documentation

    【讨论】:

      【解决方案4】:

      如果您对 libclntsh.so 有疑问,需要为 libclntsh.so 创建从 /usr/lib/oracle/11.2/client64/lib/usr/lib 的符号链接

      【讨论】:

        【解决方案5】:

        上周末我需要使用 cx_Oracle 时遇到了同样的问题。在花了很多时间尝试修改 LD_LIBRARY_PATH 变量以包含 libclntsh.so 所在的 $ORACLE_HOME/lib 目录之后,我最终通过创建从所有 Oracle xlibx.so 库到 /lib/xlibx 的符号链接来解决问题。所以。这当然不是“最干净”的解决方案,但它很有可能在不引起太多麻烦的情况下工作:

         cd $ORACLE_HOME/lib
         for f in `ls ./*.so*`; do;
           sudo ln -s $ORACLE_HOME/lib/$f /lib/$f 
         done
        

        在我这样做之后,cx_Oracle 的工作就像一个魅力。

        【讨论】:

        • 在脚本中包含后我已经解决了:. ~/.bash_profile
        • 你从哪里包含脚本?
        • 从技术上讲,这是可行的,但这是错误的答案,因为下次您更新 Oracle 客户端时,它可能会中断(并且需要重新运行)。更好的答案是修复需要 Python/Oracle 的脚本并正确设置环境值。
        【解决方案6】:

        这篇文章帮助我解决了使用oracle_fdw 链接到 Oracle 的 PostgreSQL 数据库的类似问题。

        我安装了oracle_fdw,但是当我尝试CREATE EXTENSION oracle_fdw; 时,我得到了error could not load library libclntsh.so.11.1: cannot open shared object file: No such file or directory.

        我检查了$ORACLE_HOME$PATH$LD_LIBRARY_PATH

        只有在我将 Oracle 共享库放在 Linux 共享库上之后它才起作用

        echo /opt/instantclient_11_2 > oracle.conf
        ldconfig
        

        【讨论】:

        • 你把 oracle.conf 输出到哪里了?
        • 我想应该是echo /opt/instantclient_11_2 > /etc/ld.so.conf.d/oracle.conf
        【解决方案7】:

        我必须安装依赖项

        oracle-instantclient12.2-basic-12.2.0.1.0-1.x86_64

        【讨论】:

          【解决方案8】:

          只需在运行任何脚本之前传递您的 Oracle 路径变量:
          与 perl 一样,您可以在脚本开头添加以下内容:

          BEGIN {
             my $ORACLE_HOME     = "/usr/lib/oracle/11.2/client64";
             my $LD_LIBRARY_PATH = "$ORACLE_HOME/lib";
             if ($ENV{ORACLE_HOME} ne $ORACLE_HOME
             || $ENV{LD_LIBRARY_PATH} ne $LD_LIBRARY_PATH
             ) {
                $ENV{ORACLE_HOME}     = "/usr/lib/oracle/11.2/client64";
                $ENV{LD_LIBRARY_PATH} = "$ORACLE_HOME/lib";
                exec { $^X } $^X, $0, @ARGV;
             }
          }
          

          【讨论】:

            【解决方案9】:

            我总是有这个问题,我可以通过运行下面的代码来解决: 导出 LD_LIBRARY_PATH=/opt/oracle/instantclient:$LD_LIBRARY_PATH

            OBS:这段代码我保存在配置文件中,因为我一直使用它。 祝你好运。

            【讨论】:

              【解决方案10】:

              我已将安装媒体 databases/stage/ext/lib 中的所有库文件复制到 $ORACLE_HOME/lib 并解决了问题。

              【讨论】:

                【解决方案11】:

                到目前为止,为了其他任何人的利益,最好的办法是将cx_Oracle 更新到最新版本 (6+)。这个版本根本不需要设置LD_LIBRARY_PATH

                【讨论】:

                • cx_Oracle 6 始终需要配置 OS 库搜索路径(例如,使用 LD_LIBRARY_PATH 或 ldconfig) - 请参阅文档。 used RPATH linking只有5.2和5.3版本,不需要你设置库搜索路径。
                【解决方案12】:

                您可能需要sudo 进入使用相关环境设置注册的帐户:)

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2016-04-10
                  • 2021-12-28
                  • 2015-06-02
                  • 2011-12-23
                  • 2013-04-21
                  • 2013-05-05
                  相关资源
                  最近更新 更多