1

我必须将 /oracle/v10.2.0/lib 添加到 LD_LIBRARY_PATH 才能使用 DBI 模块连接到 Oracle。

如果我在执行 perl 脚本之前在 shell 中设置 LD_LIBRARY_PATH ,一切都很好。

但它不适用于脚本:

BEGIN {
  $ENV{'LD_LIBRARY_PATH'}='/oracle/v10.2.0/lib';
}
use DBI;

当我执行脚本时,我收到错误:

install_driver(Oracle) 失败:无法为模块 DBD::Oracle:libclntsh.so.10.1 加载“/usr/apps/perl5/site_perl/5.8.8/i686-linux/auto/DBD/Oracle/Oracle.so” :无法打开共享对象文件:/usr/apps/perl5/5.8.8/i686-linux/DynaLoader.pm 第 230 行没有这样的文件或目录。在(eval 3)第 3 行编译失败(eval 3)第 3 行。可能在 /var/tmp/getTraceDB.pl 第 23 行的预期位置未安装所需的共享库或 dll

4

2 回答 2

5
BEGIN {
$ENV{'LD_LIBRARY_PATH'}.='/oracle/v10.2.0/lib';
exec($^X, $0, @ARGV);
}
use DBI;

有关正确描述,请参阅运行时链接器和 LD_LIBRARY_PATH

于 2012-03-16T11:43:33.567 回答
0

更好的是LD_LIBRARY_PATH设置您的.profile或类似的。它必须在 ELF 加载器启动时可见,甚至/usr/bin/perl在运行之前就已经可见,更不用说BEGIN脚本块了。如果必须添加路径,则该exec()技巧通过重新启动整个二进制文件来起作用,但更好的是它始终存在于您的环境中。

于 2012-03-19T18:14:10.173 回答