【问题标题】:How to check duplicate symbols in a large number of dynamic libraries如何检查大量动态库中的重复符号
【发布时间】:2013-07-12 13:38:55
【问题描述】:

我正在开发一个大型 C++ 应用程序,它使用动态库通过插件接口在运行时加载功能。

偶尔会发生跨库加载的重复符号(本地类、函数等忘记包装在匿名命名空间中,与非本地命名空间级别符号的其他不幸冲突等),这会导致 SEGV 或其他更危险的运行时未定义行为。

谁能推荐一个工具/技巧来捕捉这些重复的符号?我想检查 150-200 个 dll 的固定列表。

【问题讨论】:

  • 你真的无能为力。如果它是一个公共接口,那么任何人都可以随时添加一个破坏你的功能。在这种规模下使用 dll 的插件接口对我来说听起来很可怕,但这只是意见。
  • 正如我所说,我只关心我知道的特定固定 dll 列表中的冲突(分发的一部分)。我不在乎谁在外部做什么。
  • 另外,除了 dll,您还希望拥有什么?
  • 除了 DLL 之外,我会考虑使用进程间协议(即通过网络或共享内存进行通信)方法或脚本。但是,这取决于您在做什么。

标签: c++ dll shared-libraries


【解决方案1】:
nm -j -U <list of library names> | sort | uniq -d

对于 Windows,您需要将 nm 替换为适当的工具以从 DLL 中转储符号。

【讨论】:

    猜你喜欢
    • 2017-10-03
    • 2012-02-24
    • 1970-01-01
    • 2018-11-06
    • 2019-02-25
    • 2014-10-19
    • 2013-08-19
    • 2011-11-11
    • 2018-05-13
    相关资源
    最近更新 更多