2013-04-12 60 views
1

我的項目中有2個庫文件lib1.a和lib2.a。 Lib1.a使用lib2.a。我給出了lib2.a的源代碼,但是我沒有lib1.a的源代碼。對於我的項目,我改變了lib2.a讓我說我在一個函數中添加一個局部變量。其他靜態庫使用的靜態庫更改

我的問題,功能名稱沒有改變,我需要重新編譯lib1.a與改變lib2.a? 反正我告訴鏈接器「lib1.a應該使用新的lib2.a」而不使用lib1.a的源代碼?

+0

最初是由C或C++編譯器編譯的庫嗎? – Josh

+0

使用C編譯器構建的庫 –

回答

2

如果您只是說像添加的局部變量那樣,就不需要重建其他庫。這是因爲靜態庫通常不直接相互鏈接,而是可執行文件最終將它們鏈接在一起。

+0

爲了擴展這一點:lib1.a將嘗試指向內存中存儲lib2.a函數的位置。但問題是,因爲lib2.a函數isn在與lib1.a相同的文件中,lib1.a將不知道該函數的位置。鏈接器的工作是「解析」這些地址。所以鏈接器會知道把這些文件合併起來,因爲一個依賴於另一個。 –

+0

現在,如果您在lib2.a中創建了一個全新的函數,lib1.a將不知道該新函數,因爲它不使用它。然而,只要原型沒有改變,你可以修改一個函數,而lib1.a仍然可以使用它,因爲它只涉及地址。 –