【问题标题】:Can't load '/usr/local/lib64/perl5/auto/DBD/Oracle/Oracle.so' for module DBD::Oracle: libclntsh.so.12.1无法为模块 DBD::Oracle: libclntsh.so.12.1 加载“/usr/local/lib64/perl5/auto/DBD/Oracle/Oracle.so”
【发布时间】:2019-02-09 13:32:58
【问题描述】:

当尝试运行从 PHP 网页创建新 oracle 数据库的 perl 脚本时,会引发错误。

  • 我的 PHP 页面托管在 linux 服务器 (centos7) 上
  • 更新了以下环境变量:

    export ORACLE_HOME=oracle home path export LD_LIBRARY_PATH=$ORACLE_HOME/lib export PATH=$ORACLE_HOME/bin:$PATH

  • 点击 HTML 按钮后,从 PHP 代码执行 perl 工具:

    exec("perl scriptName.pl" )

  • 出现以下错误:

    install_driver(Oracle) 失败:无法为模块 DBD::Oracle 加载“/usr/local/lib64/perl5/auto/DBD/Oracle/Oracle.so”:libclntsh.so.12.1:无法打开共享对象文件:/usr/lib64/perl5/DynaLoader.pm 第 190 行没有这样的文件或目录。 在(评估 17)第 3 行。 在 (eval 17) 第 3 行的 require 中编译失败。 也许所需的共享库或 dll 未安装在预期的位置 在(eval 10)第 22698 行。

  • 即使单独运行 perl 脚本而不通过在 linux 服务器上执行:"perl script.pl" 从 web php 页面调用,代码也已执行并且没有引发错误。

【问题讨论】:

  • 你检查过/usr/local/lib64/perl5/auto/DBD/Oracle/Oracle.so文件是否存在吗?
  • @HåkonHægland 是的,我做到了,文件存在。
  • 好的,抱歉,我不熟悉从 Web 服务器运行 perl,所以我想我不能在这里给出好的建议。你可以试试google 或者调试DynaLoader.pm。找到它的源文件,然后转到第 190 行并尝试了解发生了什么......

标签: php linux perl centos7 oracle12c


【解决方案1】:

实际上,错误信息包含重要的指针(强调我的):

install_driver(Oracle) 失败:无法加载 '/usr/local/lib64/perl5/auto/DBD/Oracle/Oracle.so' 用于模块 DBD::Oracle: libclntsh.so.12.1: 无法打开共享对象文件:否 /usr/lib64/perl5/DynaLoader.pm 第 190 行的此类文件或目录。 (eval 17) 第 3 行。在 (eval 17) 第 3 行的 require 中编译失败。 也许所需的共享库或 dll 没有安装在哪里 预计在 (eval 10) 第 22698 行。

Oracle's "instant client" 库无法通过LD_LIBRARY_PATH 环境变量使用时,就会出现此问题。这组库包含(除其他外)libclntsh.so(后缀取决于版本)。安装后,只需确保 LD_LIBRARY_PATH 中存在相应的路径即可。

【讨论】:

  • 在几乎所有情况下,遵循Instant Client installation instructions 建议并使用ldconfig 全局设置路径会更容易。那么您就不必担心设置 LD_LIBRARY_PATH。
  • 很公平 - ldconfig 确实是“确保 LD_LIBRARY_PATH 中存在相应路径”的好方法。
猜你喜欢
  • 1970-01-01
  • 2016-08-08
  • 2021-10-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-01
  • 2013-04-25
  • 2016-07-27
相关资源
最近更新 更多