4

我有一个链接一些静态库的二进制文件列表。已确定这些库中有许多是循环依赖的。我们从来没有遇到过麻烦,因为我们将这些静态库包含在 -Wl,--start-group 和 -Wl,--end-group 之间

了解这是一种不好的做法后,我正在尝试清理系统。

我想出了一个 perl 脚本,它告诉我这些库是如何相互依赖的,如下所示:

libchld.a 依赖于 libprnt.a、libgprnt.a

libprnt.a 依赖于 libncle.a、libgprnt.a

去一个。

现在,我应该对这些进行拓扑排序,每个节点要么指向上方,要么指向下方。然后如果我在拓扑排序时找到一组循环依赖库,我将不得不通过清理系统只将那些 包含在 --start-group 和 --end-group 中(而不是包含整个库) .

是否已经有一些 perl 模块可以进行这种类型的排序?

排序::拓扑图::有向

是我要检查的那些。但是,如果图形是圆形的,它们似乎无法处理。

4

1 回答 1

1

Having understood that this is a bad practice, I'm trying to clean the system.

It's a bad practice because you are not using proper layering, not because it's somehow bad for the linker.

Therefore, cleaning up the link line without re-arranging the libraries into a proper hierarchy with no circular dependencies is a pointless exercise.

And if you do rearrange the libraries, then their proper order will be easy to understand and you wouldn't need to use Perl for that.

于 2013-03-22T03:34:46.787 回答