在加载perl模块之前修改ld.so路径

vir*_*tor 2 linux perl module shared-libraries

我正在尝试设置一个特定LD_LIBRARY_PATH的加载libpcap的修改版本而不是系统范围的.

当然,如果我运行整个脚本,这当然有效LD_LIBRARY_PATH=/blah ./script_name.我想让用户透明,所以我尝试了设置$ENV{'LD_LIBRARY_PATH'}.然而,这不会改变行为.我试图将它放在BEGIN块中以使其在其他use-s 之前工作,但也没有运气.

我怀疑这是因为ld在运行脚本的任何部分之前加载所有配置/在进程开始时配置自身.有没有办法让它发挥作用?

我想避免愚蠢的事情:

if (check_parent()) { $ENV...=.... ; `$0` ; exit }
Run Code Online (Sandbox Code Playgroud)

(或者已经建议的外包装 - 越少越好和随机包装,越好)

eph*_*ent 5

可以用脚本替换脚本的顶部

#!/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
Run Code Online (Sandbox Code Playgroud)