簡體   English   中英

靜態和動態庫創建:如何?

[英]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 沒有聯系。 沒有什么可鏈接的。


提供專門接口模板 [1] A文庫很可能是只適用於模板實現 ,包括什么,但它的接口的模板實現方式中,在其首部的文件。 但是,如果他們發現這樣做具有決定性的優勢,那么沒有什么可以阻止實現者使用非模板代碼編寫實現的內部部分—也許是尺寸優化? 在這種情況下,即使接口都是模板,它們也不會獲得僅標頭的庫。 在沒有反補貼的情況下,模板接口的自然實現是模板實現,而僅標頭的庫是自然的產品。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM