2008-11-07 72 views
7

我很新的C++構建流程,我想切換到使用部分鏈接我的圖書館,而不是創建ar檔案。我希望能夠在不可避免的最終編譯步驟中減少鏈接時間,並且我想部分鏈接一些庫可以節省我在最後一步鏈接所有內容的時間。g ++部分鏈接而不是檔案?

就是我描述可能嗎?我認爲它應該是沿線ld -Ur -o mylib.o [components]。有沒有重要的構建考慮,我沒有考慮到?

回答

6

你失去了其在ar存檔,這是隻有引用的對象將被鏈接對象文件中的重要作用。

如果你有兩個foo.o與符號foo和文件bar.o與符號bar在一個ar存檔中,並且只引用foo符號,只有foo.o將鏈接。如果您改爲執行部分鏈接,則兩者的內容將以可執行文件結尾,即使bar從未在任何位置引用。

您也可以嘗試更快的連接,就像gold

+0

所以基本上可執行膨脹可以被預期的那樣更快聯動的缺點,對不對? – cdleary 2008-11-07 01:45:08

0

要使用LD -r執行部分鏈接的其它時間,如果你有一個包含需要提供一定的功能,但它永遠不會被任何代碼直接調用靜態初始化一些目標文件。

如果您想我可以寫上去,展示它是如何工作以及爲什麼它工作的文件! (參見運行時C++類註冊,例如,它使用一個靜態註冊函數,它在註冊表中註冊自己,然後可以用它創建並返回一個帶有多態行爲的Base *,因爲它創建了一個新的對象,它是從基本繼承。見C++ runtime knowledge of classes這是一個問題的答案,我問。)