2009-08-17 19 views
3

Short: 我正在寻找一些能够列出SO中所有未解决的依赖关系的东西,同时考虑到依赖关系中的SO。有没有一种自动的方法来找出共享对象的依赖关系?

长:

我很多静态编译的代码转换为在Linux的共享对象是有一个简单的方法,以确定哪些其他SO我最近编译SO取决于除了试&错误,而试图加载它?

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

我发现了“ldd”,但只列出了SO所依赖的内容。 我也使用“nm”来找出SO未能加载以验证其他SO是否包含它。

+0

Plz将SO重命名为Shared Objects。这也意味着StackOverflow。 – 2009-08-17 15:00:36

+0

完成重命名。 – Luciano 2009-08-17 19:18:54

回答

2

我没有对你的代码,但我可以指点:

这只是一个图形的问题。您应该使用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中提供的东西。

+0

“ldd -r foo.so” - >“不是动态可执行文件” – 2011-01-30 09:17:54

相关问题