是否有自动方法来计算共享对象依赖项?

时间:2009-08-17 14:41:49

标签: linux shared-libraries

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

长:

我正在将许多静态编译的代码转换为Linux中的共享对象 - 除了试用版之外,还有一种简单的方法可以确定我最近编译的SO依赖于哪些其他SO。尝试加载时出错?

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

我找到了“ldd”,但这只列出了SO所说的依赖。 我还使用“nm”来确定一旦SO无法加载以验证其他SO包含它。

2 个答案:

答案 0 :(得分:2)

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

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

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

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

答案 1 :(得分: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未提供的内容,则会失败(链接)。