我最近安装了 CentOS 6.3 (i386)。
它有两个 perl 二进制文件
/usr/bin/perl (v5.10.1)
/usr/local/appx/perl/bin/perl (v5.8.8)
我的问题:是否可以使用该应用程序中的系统范围 perl 和 perl 模块来安装一些其他功能到该应用程序?
就像下面这样:
./configue -prefix=/usrl/local/app_xyz -perl_lib_path=/usr/local/appx/perl/lib/5.8.8/
我已经尝试了上面的方法,但出现以下错误:
RRD Perl Module -----------------**Not Found**
但该 perl 模块RRDs.pm
在该目录下可用/usr/local/appx/lib/5.8.8
。
此外,该configure
脚本不必ARG
映射我们的 appx perl 二进制路径 ( /usr/local/appx/perl/bin/perl
),它会自动选择系统范围的 perl 作为默认值。
答案1
Perl 5 次要版本是向后兼容的,因此 5.8.8 模块应该与 5.10.1 perl 一起使用(但有一个例外,请参阅下面的警告)。包含路径 ( @INC
) 在构建 perl 时配置,但@INC
可以由单独的程序修改,并且全局环境变量 $PERL5LIB 的内容被添加到前面。
export PERL5LIB=/usr/local/appx/lib/5.8.8
然而,这种方法有一个问题。 因为 $PERL5LIB 是前置的,这样@INC
做会导致加载各种标准模块时优先使用 5.8.8 目录。这是不可取的。
因此,一种不太整洁但最终更好的想法是仅将符号链接/usr/local/appx/lib/5.8.8/RRD.pm
(和/或 RRD 目录,如果有)到/usr/local/lib/perl5
或其他一些标准@INC
目录。您可以看到那些:
perl -e 'print "$_\n" foreach @INC'
请注意,可能同时存在顶级 RRD.pm 和并行 RRD 目录;如果是这样,你想对两者进行符号链接。
警告
某些 Perl 模块包含从 C 编译的部分,这些部分可能会损坏。如果 RRD.pm 不使用 C,那么您不必担心。如果是这样,您应该复制它,而不是对其进行符号链接并重建;为此,您需要源代码,该源代码可能存在,也可能不存在:(