BEGIN块中的LD_LIBRARY_PATH初始化失败



我必须将/orace/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/5.8.8/i686-linux/DynaLoader.pm第230行没有这样的文件或目录。在(eval 3)第3行在(eval 3)第3行的require中编译失败。可能未在预期位置安装所需的共享库或dll在/var/tmp/getTraceDB.pl第23行

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

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

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

相关内容

  • 没有找到相关文章

最新更新