【问题标题】:Why is Net::SNMP trying to load the wrong libnetsnmp.so?为什么 Net::SNMP 试图加载错误的 libnetsnmp.so?
【发布时间】:2020-07-10 05:47:46
【问题描述】:

我创建了一个 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 中的插件?

【问题讨论】:

  • 请将perl -V的输出添加到问题中。

标签: perl snmp


【解决方案1】:

这可能是

  • /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

链接到特定版本的libntsnmp.so,对上述两个文件运行ldd,看看输出告诉你什么。

【讨论】:

    【解决方案2】:

    如果 libnetsnmp.so.15 未知打印:
    查找/-名称 libnetsnmp.so.15 cp /.../libnetsnmp.so.15 /usr/lib 或在分配所有库的目录中 一切都会好起来的......

    【讨论】:

      猜你喜欢
      • 2011-12-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-27
      • 1970-01-01
      • 2021-05-01
      • 2017-10-30
      • 1970-01-01
      相关资源
      最近更新 更多