[英]Static & Dynamic Library Creation: How to?
因此,我為基於二進制樹的數據結構(例如AVL,Red-blacks,Tries等)制作了一些C ++頭文件,並且我想創建一個.lib文件,該文件可隨時用於較大的項目。 我編寫的代碼都是面向對象的並且是模板化的。 事實是,我所擁有的只是很多頭文件(我在頭文件中包含了功能,因為我使用了模板,並且希望獲得最大的模塊化),並且沒有源文件。 我試圖在Visual C ++中創建一個新的.lib項目,但是如果沒有源文件,它不會產生任何.lib文件,如果沒有我不願意做出的妥協,就無法創建該文件。 我看不到該問題的任何解決方案,所以請您提供一些有關如何進行的信息? 謝謝!
如果您創建了一個庫,其源代碼完全由C ++頭文件組成,那就是我們所說的僅頭文件的庫 。 您無需做其他任何事情。
僅標頭的C ++庫是正常的。 許多Boost庫都是僅標頭的。 傳統上稱為標准模板庫的標准C ++庫的子集傳統上僅是標頭。 當庫接口完全由模板組成時,實現很可能是在您編寫頭文件時完成的,在這種情況下,頭文件就是庫。 1個
您希望模板庫可在其他項目中重用嗎? 已經是 要重用它:-
您可以使用其include-directories選項或IDE中的等效項目設置告訴編譯器在哪里可以找到頭文件。
您根據需要#include
頭文件。
這里的所有都是它的。
在MS Visual Studio上刻骨銘心可能會給您一個早期的印象,即一個庫必須有一個.lib
文件,但不清楚為什么會這樣。 在MS Windows世界中,當庫是常規庫而不是C ++僅標頭庫時,情況就是如此。 (並且相應的情況在Linux和其他OS中是正確的,除了它們具有其他內容而不是.lib
文件)。 傳統的C或C ++庫都是從定義其接口的頭文件和定義其實現的單獨源文件中構建的。 構建庫需要將每個源文件編譯成包含庫實現一部分的目標文件,然后將所有這些目標文件以某種形式打包在一起-動態庫或靜態庫-包含整個實現。
因此,要重用常規庫,我需要其頭文件,以便可以在源代碼中正確調用其接口。 我需要的目標文件庫包,其中包含其二進制執行,這樣我就可以告訴鏈接到我的對象文件與封裝連接在一起,並生成一個完整的工作程序。 庫的.lib
文件表示鏈接程序的目標文件包(盡管表示對於靜態庫而言意味着一件事,對於DLL而言則意味着截然不同)。
對於僅標頭的庫,根據定義,沒有單獨的源文件定義實現的各個部分。 因此,沒有單獨的目標文件。 因此,沒有單獨的目標文件包。 沒有.lib
。 沒有聯系。 沒有什么可鏈接的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.