【问题标题】:Is there an automated way to figure out Shared Object Dependencies?有没有一种自动化的方法来找出共享对象依赖关系?
【发布时间】:2010-11-20 06:35:16
【问题描述】:

短: 我正在寻找能够列出 SO 中所有未解决的依赖项的东西,同时考虑到其依赖项中的 SO。

长:

我正在将大量静态编译的代码转换为 Linux 中的共享对象——除了尝试加载它时的反复试验之外,是否有一种简单的方法可以确定我最近编译的 SO 依赖于哪些其他 SO?

我确定有更好的方法,但我还没有找到。

我找到了“ldd”,但这仅列出了 SO 所说的它所依赖的内容。 我还使用“nm”来确定某个 SO 无法加载以验证其他 SO 包含什么。

【问题讨论】:

  • 请把 SO 重命名为共享对象。 SO 也意味着 StackOverflow。

标签: linux shared-libraries


【解决方案1】:

我没有代码给你,但我可以指点一下:

这只是一个图形问题。您应该使用objdump -T 转储给定二进制或共享对象的动态符号表。您会看到很多行输出,并且标志可能有点令人困惑,但重要的部分是这些符号将是 *UND* 或者它们将具有段名称(.text 等)。

任何时候你看到*UND*,这意味着它是一个必须解决的未定义符号。已定义的符号是解析的目标。

有了它,再加上一点 Python,你应该能够找到你需要的东西。

【讨论】:

    【解决方案2】:

    "ldd -r foo.so" 应该打印foo.so 需要但不是由其直接依赖项提供的符号集。

    或者,像这样链接foo.so

      gcc -shared -o foo.so foo.o bar.o -ldep1 -ldep2 -Wl,--no-undefined
    

    如果foo.obar.o 使用libdep1libdep2 或libc 未提供的东西,这应该会失败(链接)。

    【讨论】:

    • "ldd -r foo.so" -> "不是动态可执行文件"
    猜你喜欢
    • 2015-12-19
    • 2014-03-10
    • 1970-01-01
    • 2015-07-17
    • 2011-07-22
    • 1970-01-01
    • 1970-01-01
    • 2013-02-13
    • 2011-01-20
    相关资源
    最近更新 更多