短: 我正在寻找能够列出SO中所有未解决的依赖关系的东西,同时考虑到它依赖的SO。
长:
我正在将许多静态编译的代码转换为Linux中的共享对象 - 除了试用版之外,还有一种简单的方法可以确定我最近编译的SO依赖于哪些其他SO。尝试加载时出错?
我确信有更好的方法,但我还没有找到它。
我找到了“ldd”,但这只列出了SO所说的依赖。 我还使用“nm”来确定一旦SO无法加载以验证其他SO包含它。
答案 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.o
或bar.o
使用libdep1
或libdep2
或libc未提供的内容,则会失败(链接)。