2013-03-21 44 views
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模塊可以完成這種排序?

排序::拓撲 圖::導演

是那些我試圖檢查。但是,如果圖形是循環的,他們似乎不處理。

+0

您需要依賴關係圖的[強連通組件](http://search.cpan.org/perldoc/Graph#strongly_connected_components)。 – 2013-03-21 17:12:42

回答

1

瞭解到這是一個不好的做法,我試圖清理系統。

這是一個不好的做法,因爲您沒有使用適當的分層,而不是因爲它對鏈接器有點不好。

因此,清理鏈接線時,不要將庫重新安排到沒有循環依賴的適當層次中,這是毫無意義的練習。

如果你重新排列庫,那麼它們的順序就會很容易理解,你不需要使用Perl。

+1

按照正確的順序傳遞庫後,該任務不應該結束。修復源代碼是下一個操作。 – venkrao 2013-03-22 07:13:28