靜態庫對函數的鏈接是在編譯時期完成的,程序運行時與函數庫無聯繫,移植方便,缺點就是浪費空間和資源。而對於動態庫,編譯時,不會被鏈接到目標代碼中,在程序運行時,纔會載入。動態庫在內存中只拷貝一份,節約了空間。
還得說明的是,在鏈接時,不管是動態庫還是靜態庫其實都有.lib文件。對於靜態庫來說,.lib包含了函數聲明和定義,而動態庫的.lib是聲明,.dll纔是定義。
接下來說明lib和dll的使用
使用lib庫的方法
首先,在Visual Studio中"項目上右擊->屬性->連接器->常規->附加庫目錄"寫上.lib庫所在文件夾
附加庫目錄lib文件夾下內容圖:
可以看到,裏面全部是lib文件。
然後在 "項目->屬性->連接器->輸入->附加依賴項"中寫上.lib庫的名稱。
測試一下:首先只加載了opencv的lib,沒有加入桌面上庫的.lib
運行結果:可以看到報錯了
然後我們把目錄中的.lib名稱複製過來
再運行,成功了。
還有一種情況,在解決方案裏A,B兩個工程,B工程生成.lib庫給A工程用,那麼就右鍵A工程"引用->通用屬性->框架和引用->添加新引用"選擇B工程即可。
這裏擴充一下,在添加.lib名字時,如果文件較多,則可以如下:
首先新建一個帥選器:
在帥選器中,把所有的lib拉進來。
還有一種方法:我們在.lib目錄下,新建一個cmd.bat。然後輸入 dir ,裏面顯示了所有的.lib
然後在上面右鍵標記,選中所有lib,按下回車鍵 ,然後粘貼到附加依賴項。
使用DLL方法:
一種笨方法,將需要的dll文件複製到工程文件。其他方法參考其他網站