我有一个链接一些静态库的二进制文件列表。已确定这些库中有许多是循环依赖的。我们从来没有遇到过麻烦,因为我们将这些静态库包含在 -Wl,--start-group 和 -Wl,--end-group 之间
了解这是一种不好的做法后,我正在尝试清理系统。
我想出了一个 perl 脚本,它告诉我这些库是如何相互依赖的,如下所示:
libchld.a depends on libprnt.a, libgprnt.a
libprnt.a depends on libncle.a, libgprnt.a
去一个。
现在,我应该对这些进行拓扑排序,每个节点要么指向上方,要么指向下方。
然后如果我在拓扑排序时发现一组循环依赖库,我将不得不附上 只有那些 通过清理系统,在 --start-group 和 --end-group 中(而不是封闭整个库)。
是否已经有一些 perl 模块可以进行这种类型的排序?
Sort::Topological Graph::Directed
是我要检查的那些。但是,如果图形是圆形的,它们似乎无法处理。
最佳答案
Having understood that this is a bad practice, I'm trying to clean the system.
这是一种不好的做法,因为您没有使用正确的分层,而不是因为它对链接器不利。
因此,清理链接线而不将库重新排列为没有循环依赖的适当层次结构是毫无意义的练习。
而且,如果您确实重新排列了库,那么它们的正确顺序将很容易理解,并且您不需要为此使用 Perl。
关于perl - 通过脚本识别静态库之间的循环依赖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15553006/