windows下有靜態鏈結庫(lib)和動態鏈結庫(dll)兩種共享**的方式。
本文將介紹lib的應用場景,以及在vs2017平台下的生成和使用。
[how] 如何呼叫lib
[why] lib的優缺點
[github] **
[reference] 參考
通常所說的lib是指靜態鏈結庫(static link library),其中包含**實現,lib實際上是obj檔案的集合(obj檔案由cpp檔案編譯生成),lib可以看作是乙個殼子,obj檔案集合打包生成lib的過程也稱為"archive"。在應用程式生成過程中鏈結器將**鏈結到目標模組(exe或dll)中,完成鏈結後lib檔案也就沒有用了,程式發布時無需提供lib檔案。
ps:vs2017新建lib專案會預設建立預編譯頭,如果不使用預編譯頭,則進行如下設定並刪除相關檔案即可:
新建乙個控制台應用,在其中呼叫上述生成的lib。
呼叫lib需要兩個檔案:.**件和.lib檔案。
依次配置下列控制台應用的專案屬性:
使用專案配置的方式呼叫lib庫比較繁瑣,還可能需要對debug版本和release版本作不同的配置。比較適合引用成熟的第三方庫,eg. protobuf, gurobi等。使用
#pragma comment(lib, "../debug/mylib.lib")
語句呼叫lib。
#pragma comment
語句將庫目錄直接寫進**,更加直觀;需要仔細將頭檔案目錄和庫目錄寫對。
如果lib專案和控制台專案在同一解決方案下,可以採用直接新增引用的方式。
直接引用的方式最為簡單,也避免了路徑寫錯的可能性,但它無法區分該lib庫是debug版本還是release版本。這種方法也等效於直接將lib檔案拖到專案資源裡使用。專案例項均在vs2017上測試,並上傳至github:
vs2017使用中遇到的問題
1.mfc在介面新增類時,出現缺少預設default.js或者.vbs。在microsoft visual studio2017 community common7 ide vc vcwizards codewiz mfc中新增 檔案即可。移步大神文章。2.在學習中,突然出現了 無法啟動程式,拒絕訪...
一文梳理2017阿里研發崗筆試(1)知識點
inline函式 乙個較為合理的經驗準則是,不要內聯超過 10 行的函式,較大則不會成為內聯函式,謹慎對待析構函式,析構函式往往比其表面看起來要更長,因為有隱含的成員和基類析構函式被呼叫。有些函式即使宣告為內聯的也不一定會被編譯器內聯,這點很重要,比如虛函式和遞迴函式就不會被正常內聯.內聯函式的定義...
在vs2017中嘗試c 單元測試(一)
首先有兩種方式來建立 第一種是新建專案 即包括core型別,也包括傳統型別。第二種是在 處直接右鍵 兩種方法的區別在於 建立單元測試 選單命令僅適用於面向 net framework 但不是 net core 的託管 單元測試的框架很多,mstest是微軟自帶框架,第三方框架nunit 或 xuni...