我试图设置一个特定的LD_LIBRARY_PATH
来加载libpcap的修改版本,而不是系统范围的。
当然,如果我用LD_LIBRARY_PATH=/blah ./script_name
运行整个脚本,这是有效的。 我想让这个用户透明,所以我试着设置$ENV{'LD_LIBRARY_PATH'}
。 这并不改变行为。 我试图把它放在BEGIN
块中,使其在其他use
-s之前工作,但在那里也没有运气。
我怀疑这是因为在运行脚本的任何部分之前,在进程开始时ld加载所有configuration/configuration本身。 有没有办法使它工作?
我想避免愚蠢的事情,如:
if (check_parent()) { $ENV...=.... ; `$0` ; exit }
(或者如已经build议的外包装 – 越less越脏和随机包装,越好)
您可以用脚本替换脚本的顶部
#!/bin/sh LD_LIBRARY_PATH="/blah:$LD_LIBRARY_PATH" export LD_LIBRARY_PATH exec perl -x -S "$0" "$@" || exit 1 #!perl # rest of your script
在Perl脚本中设置LD_LIBRARY_PATH的原因没有任何效果,因为在Perl运行的时候,动态加载器已经读取了LD_LIBRARY_PATH,并且没有重读。 因此,即使是一个BEGIN块也为时已晚 – 动态加载器已经读取了它所需要的内容。