在加载perl模块之前修改ld.sopath

我试图设置一个特定的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块也为时已晚 – 动态加载器已经读取了它所需要的内容。