libclntsh.so.11.1:无法打开共享目标文件
我想通过icrontab在linux上安排任务,并且任务是用python编写的,必须导入cx_Oracle模块,因此我在.bash_profile中导出ORACLE_HOME和LD_LIBRARY_PATH,但 它引发错误:libclntsh.so.11.1:无法打开共享目标文件
libclntsh.so.11.1: cannot open shared object file.
因为它是确定的问题shell来运行任务的命令一样
python a.py # ok
我改变任务icrontab到一个shell脚本调用我的Python脚本,但例外recu rred?
# the shell script scheduled in icrontab
#! bash
python a.py
你能帮忙怎么处理它吗?
当我需要使用cx_Oracle我碰到了同样的问题最后一个周末。花费了大量时间尝试修改LD_LIBRARY_PATH变量以包含libclntsh.so驻留的$ ORACLE_HOME/lib directoy之后,我最终通过从所有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 – 2010-04-27 11:20:14
你从哪里包含脚本? – 2010-04-29 22:59:35
从技术上讲,这会起作用,但这是错误的答案,因为下次您更新Oracle客户端时,可能会中断(并且需要重新运行)。更好的答案是修复需要Python/Oracle的脚本并正确设置环境值。 – 2010-09-01 22:07:14
该库位于 /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”应该写什么内容? – Gank 2017-08-19 02:23:14
这篇文章帮助我通过使用oracle_fdw
来解决PostgreSQL数据库链接到Oracle的类似问题。
我安装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? – 2016-02-01 19:07:42
我想它应该是'echo/opt/instantclient_11_2> /etc/ld.so.conf.d/oracle.conf'。 – danielp 2018-02-21 11:39:00
只是通过你的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;
}
}
如果你有libclntsh.so问题,需要建立从/usr/lib/oracle/11.2/client64/lib
libclntsh.so符号链接/usr/lib
但我们更新了如下的shell脚本: #!/bin/bash echo $ ORACLE_HOME echo $ LD_LIBRARY_PATH 并将crontab的输出重定向到日志文件 为什么这些路径被发现并写入日志? – 2010-04-25 14:17:59
@zhangzhong我想你想用'export'而不是'echo'? E.例如, 'export ORACLE_HOME =/usr/lib/oracle10/foo'和'export LD_LIBRARY_PATH =/usr/lib/bar' – 2010-04-26 09:36:57