2012-02-29 57 views
1

當一個大的代碼庫工作,當使用某些對象是我見過的,那個對象的頭文件包含。在其他時間,該對象的庫鏈接在make文件中。聯VS包括文件

做一個或另一個的原因是什麼。如果他們有權訪問源代碼,那麼爲什麼不包含所使用的對象的所有文件,而不是鏈接到它們的lib * .a文件中?

編輯:根據第一條評論明確。這是一個令人困惑的陳述

+0

你的意思是一個「頭文件中生成文件鏈接」? – Kashyap 2012-02-29 17:55:37

+1

目標文件已鏈接。不是頭文件AFAIK。 – Mahesh 2012-02-29 17:58:54

+0

解決了我的問題。我跳過了非常詳細的描述。 – nulltorpedo 2012-02-29 17:59:57

回答

4

通常情況下,你需要同時做兩個。頭文件告訴編譯器什麼 函數可用,以及它們的樣子。在編譯時它們必須是 。庫中包含的實施, 必須與應用程序,以使編譯器生成 電話的工作聯繫起來。

在少數情況下,「庫」可能只包含頭文件; C++ 仍需要實現模板才能出現在 標題中,而不是在庫中,因此只包含 模板的庫可能僅爲標題。在這種情況下,包含頭文件就足夠了;沒有什麼更多的鏈接。 (當然,這樣 庫驅動穿過屋頂的編譯時間。)

0

有不一定頭文件和二進制文件之間的一對一的關係。實際上,這通常不是。例如,僅僅因爲你看到包含foo.h並不一定意味着會有foo.obj或foo.lib。反過來也是如此;即,你可能會看到foo.lib被鏈接,但沒有foo.h.

以Windows爲例,你需要使用相當多的頭文件來使用kernel32.lib中的任何東西,但是沒有kernel32.h。

0

使用庫的一個很好的參數是它可以更容易地使用:編譯大型代碼庫時,所有依賴關係必須可用,並且可能需要具體步驟,與當前任務無關。當然,編譯時間會被刪除。