【问题标题】:What are the impacts of (dlopen failed: undefined symbol: memdup) with respect to SNMP?(dlopen failed: undefined symbol: memdup) 对 SNMP 有什么影响?
【发布时间】:2017-08-29 20:33:16
【问题描述】:

在处理 SNMP 时,我无法执行 snmpwalksnmpset。然后我检查了snmpd -H

我看到一个错误:

dlopen(/lib/libvcpeLiTapMediationTable.so) 失败:/lib/libvcpeLiTapMediationTable.so:未定义符号:memdup dlopen(/lib/libvcpeLiTapStreamTable.so) 失败:/lib/libvcpeLiTapStreamTable.so:未定义符号:memdup

我认为我的图书馆可能不会因此而动态打开。

当我在 CentOS 中以 rpm 的形式加载我的软件包时,我没有任何错误。 但是对于相同的代码,当我在 Ubuntu 中将我的包作为 debian 包加载时,我看到了这个错误。

查询:

  1. SNMP 安装是否有任何问题(因为它在 CentOS 上工作但在 Ubuntu 上不工作)?还是我的 debian 软件包中缺少某些东西?

  2. 请说明此错误对我的操作的影响。

任何相关的答案都会有所帮助,因为我是新手。

谢谢。

【问题讨论】:

    标签: shared-libraries snmp


    【解决方案1】:

    您的libvcpeLiTapMediationTable.so 取决于函数memdup()。这是在你的 CentOS 上定义的,无论它是在哪里构建的,在 Net-SNMP 或它或 libvcpeLiTapMediationTable.so 在运行时链接到的库之一中,但在你的 Ubuntu 上没有定义。因此,它无法加载。

    Net-SNMP 在snmplib/tools.c 中定义了memdup(),但它被重命名为netsnmp_memdup() 以避免与可能根据change history 定义自己的版本的其他库发生冲突。也许您在两个发行版之间使用了两种不同版本的 Net-SNMP,一种有这种变化,一种没有这种变化。

    【讨论】:

    • 是的,这些信息很有帮助。此类错误的影响是什么?这些表上的任何 snmp 操作都不起作用吗?
    • 我想不会。我只是根据文件名在这里猜测,但我想该文件正在实现一个 [可能是专有的,因为我找不到任何关于它的内容] 表作为在运行时动态加载到主代理中的子代理提供其功能。由于此错误无法加载,因此它实现的任何内容都不会添加到主代理中。
    • 为什么我们不会在编译时得到这种类型的错误,因为它是“未定义的符号”错误?
    • 因为它可能在编译时定义的。但是无论它是在编译时定义的,它都不存在于您的 Ubuntu 中。尝试在 .so 文件上运行 ldd 以找出它链接到的内容,然后在每个构建/运行主机上的每个文件上运行 readelf -s <file> | grep memdup 以找出它在哪里/未定义。跨度>
    • 您能否确认 netsnmp_memdup 返回什么? void *netsnmp_memdup(const void * from, size_t size);这会返回重复的内存块吗?作为函数 int memdup(u_char ** to, const void * from, size_t size);用于返回 int 类型的值。复制的内存块是否分配给参数“u_char ** to”?
    猜你喜欢
    • 1970-01-01
    • 2011-12-24
    • 1970-01-01
    • 2016-10-14
    • 1970-01-01
    • 2016-06-29
    • 1970-01-01
    • 2014-10-05
    • 1970-01-01
    相关资源
    最近更新 更多