我必须将/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()
技巧可以通过重新启动整个二进制文件来工作,但最好是它始终存在于您的环境中。