簡體   English   中英

C ++導入庫按來源

[英]C++ import library by source

我是C ++的新手,想知道按源代碼包含庫是否是一種好習慣。 如果是這樣,那么實現這一目標的最佳方法是什么? 只是在子文件夾中復制並使用包含?

在我的特殊情況下,我編寫了一個小庫,將在兩個不同的微處理器上使用它。 對我來說,分別編譯該庫,復制所有標頭並使用此“包”似乎是過大的。

通常,將庫用作庫,因為這樣更容易使用。 如果您使用的是動態庫(.dll或.so),則情況會變得更好,因為您可以隨時替換庫,並且應繼續平穩運行。

您決定使用代碼存儲庫而不是庫,這可能意味着您需要做更多的工作。 如果您對這種方式感到滿意,那么可以,但是只需確保您不破壞任何許可證,某些lgpl軟件包(例如Qt)顯然需要動態鏈接其庫。

最好的方法是:很難說,但在您的位置,我可能會使用git並將庫作為子模塊包含在內。

應該分別編譯該庫。

不是矯枉過正或者:你剛剛編譯.o文件庫中,然后包裹在他們的檔案和周圍處理該存檔。

#include源代碼是一個壞主意,因為這意味着僅將代碼復制到您自己的代碼中,那樣可能會出錯。 例如,如果庫代碼中某處有一個靜態變量,而代碼中有相同名稱的靜態變量,則將發生沖突。

取而代之的是,您可能應該分別編譯該庫並鏈接它,這可能與您無論如何都要進行編譯(即,建立該庫然后與該庫鏈接)相同。 但是,輕量級的選擇只是編譯其他C ++文件,然后將目標文件鏈接到可執行文件。 有關如何執行此操作的詳細信息是特定於編譯器的。

有充分的理由以這種方式包括庫源代碼,例如,如果您的項目在開發過程中需要修改庫,那么如果將庫的重建作為項目構建過程的一部分來完成,則這樣做會更加容易。 通過精心設計的構建過程,除非對該庫進行了實際更改,否則不必重建該庫。

庫的價值部分在於,與編譯相比,鏈接的頻率更高,從而節省了資金。

如果您控制所有源代碼,那么最適合您的構建過程都可以。

我同意πάνταῥεῖ,但我還要補充一點,這是不好的做法,原因是編譯后的庫可以存儲在您計算機中的同一位置,並且可以被大量不同的程序使用,從而減少了計算機擁有的數據量存儲在內存以及RAM中(如果有多個正在運行的程序使用同一庫)。 一個示例是openGL,它是許多游戲使用的庫,可能已經在系統中的某個地方。 如果使用Windows,則軟件安裝程序會將這些庫鏈接到其程序,如果沒有,則將其添加。 如果您使用linux,則會在缺少庫的情況下收到通知,並提示您安裝它們。 除了所有這些,您可以從技術上使用未編譯的庫,但這會帶來許多潛在的許可問題以及THEIR依賴項的其他問題。

通過將源代碼復制到其他項目並將其與其他源代碼“混合”,將阻止該庫成為“庫”。 稍后,您將傾向於在一個副本(對於CPU)中進行少量更改或修復錯誤,而忘記在另一副本中進行相同的更改。

可能還有其他考慮,但是您應該嘗試將代碼放在一個地方。 不要重復自己(DRY)是軟件工程中非常重要的基礎,它有很多好處。

暫無
暫無

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

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