2012-10-04 49 views
0

我在構建一個鏈接到兩個共享庫libA.so和libB.so的autotools應用程序。它們都包含共享庫和靜態(是的,針對推薦靜態)庫。靜態庫libmetis包含在libA和libB中,但不幸的是,它們有不同的版本。防止gcc/libtool在每次鏈接時從零開始構建共享對象

說libA.so有libA1.so,libA2.so .... libmetis5.a

說libB.so有libB1.so,libB2.so .... libmetis4.a

在機1臺,運行Ubuntu,對於最終的應用程序的鏈接線看起來像

libtool mode=link application.c -lA -lB -o application 

在機2臺,運行CentOS的,對於最終的應用程序的鏈接線看起來像

libtool mode=link application.c -lA -lA1 -lA2... -lmetis5 -lB -lB1 -lB2... -lmetis4 -o application 

由於libA和libB都從機器2中的contituent庫中重新鏈接,我最終得到libA和libB具有同一版本的libmetis,這會導致應用程序崩潰。

我該如何控制或禁止Libtool重新鏈接的設置已經好去圖書館? 我已經嘗試不使用自動工具只爲應用程序,手動給鏈接線,但行爲是相同的。

感謝您的幫助,

義隆

回答

0

如果你實際上是在Metris的[45]到LIB [AB] CentOS的機器2上拉,那麼他們就不會出現在鏈接線(如他們不在Ubuntu機器1下)。

+0

他們不應該,但他們應該這樣做。 lib [AB]完全構建並存在,這意味着metis [45]已經被合併。然後,當應用程序嘗試鏈接到lib [AB]時,lib [AB]將不必要地再次從其組成對象文件鏈接。 – Elan