我创建了一个 Perl 脚本并在几台运行Net::SNMP 5.3.1-19 的服务器上对其进行了测试,但现在我试图在另一台服务器上运行它,但出现以下错误:
Can't load '/usr/lib/perl5/site_perl/5.8.8/i386-linux-thread-multi/auto/NetSNMP/default_store/default_store.so' for module NetSNMP::default_store: libnetsnmp.so.15: cannot open shared object file: No such file or directory at /usr/lib/perl5/5.8.8/i386-linux-thread-multi/DynaLoader.pm line 230.
at /usr/lib/perl5/site_perl/5.8.8/i386-linux-thread-multi/SNMP.pm line 16
Compilation failed in require at /usr/lib/perl5/site_perl/5.8.8/i386-linux-thread-multi/SNMP.pm line 16.
BEGIN failed--compilation aborted at /usr/lib/perl5/site_perl/5.8.8/i386-linux-thread-multi/SNMP.pm line 16.
Compilation failed in require at /shaw/neteye/perl_scripts/cmtsmonitord.pl line 9.
BEGIN failed--compilation aborted at /shaw/neteye/perl_scripts/cmtsmonitord.pl line 9.
为什么加载程序抱怨libnetsnmp.so.15?我在所有其他服务器上都安装了libnetsnmp.so.10,它工作得很好。符号链接指向相同的版本 (10),而不是 15。对于更高版本的Net::SNMP (5.4.2.1) 不是必需的吗?
[user@wb lib]$ sudo /sbin/ldconfig |grep snmp
/sbin/ldconfig: /usr/lib/libgd.so.2 is not a symbolic link
[user@wb lib]$ sudo /sbin/ldconfig -p |grep snmp
libsnmp.so.10 (libc6) => /usr/lib/libsnmp.so.10
libnetsnmptrapd.so.10 (libc6) => /usr/lib/libnetsnmptrapd.so.10
libnetsnmpmibs.so.10 (libc6) => /usr/lib/libnetsnmpmibs.so.10
libnetsnmphelpers.so.10 (libc6) => /usr/lib/libnetsnmphelpers.so.10
libnetsnmpagent.so.10 (libc6) => /usr/lib/libnetsnmpagent.so.10
libnetsnmp.so.10 (libc6) => /usr/lib/libnetsnmp.so.10
当所有的 snmp 包都相同时,为什么要尝试在此服务器中使用更新版本的动态库?
我注意到别的东西。有 2 组default_store.so库。
/usr/lib/perl5/site_perl/5.8.8/i386-linux-thread-multi/auto/NetSNMP/agent/default_store/default_store.so
/usr/lib/perl5/site_perl/5.8.8/i386-linux-thread-multi/auto/NetSNMP/default_store/default_store.so
/usr/lib/perl5/vendor_perl/5.8.8/i386-linux-thread-multi/auto/NetSNMP/agent/default_store/default_store.so
/usr/lib/perl5/vendor_perl/5.8.8/i386-linux-thread-multi/auto/NetSNMP/default_store/default_store.so
工作正常的机器只有vendor_perl机器,这是随 RPM 一起安装的。两者(供应商和基地)有什么区别?如何强制 perl 使用vendor_perl中的附加组件?