VS中lib和dll


Lib文件

先來說一說lib文件,C++中lib文件主要有兩類,一種是靜態的編譯連接,叫做靜態鏈接庫,另一種是動態的編譯鏈接,和Dll文件一起使用,在該小標題下,主要說一下靜態鏈接庫,另一種將在Dll文件中講解。所謂的靜態鏈接庫,就是以.lib結尾的文件(由於有動態的編譯鏈接的lib存在,因此並不是所有的.lib文件都是靜態鏈接庫文件),該文件可以通過VS2005建立工程,然后將項目屬性中的輸出設置成lib形式,編譯后就可以生成一個.lib文件,這就是靜態鏈接庫。

  • 我們如何使用生成的.lib文件呢?

為了可以使用.lib文件,我們需要剛剛生成的.lib文件,以及它所對應的頭文件.h,因為.lib文件無法直接訪問,且無法得知其接口,因此需要對應的頭文件。假設現在有一個工程需要使用該lib文件,首先需要在工程屬性中將.h文件的路徑設置好,在文件中使用#include將頭文件包含,然后對於lib文件,需要在工程屬性中,設置其路徑(或者直接放在工程文件的目錄下,因為工程查找文件時是以工程文件所在路徑為相對路徑查找),然后類似opencv一樣,在項目屬性中,linker->input中輸入要使用的lib名(或者使用program**,在文件中用語句將其寫入(推薦)),這樣配置就結束了。

  • lib文件如何起作用?

當工程在編譯的時候,系統就會將lib中的函數的實現插入到生成的exe中,從而完成其作用,因此我們知道,當lib很大的時候,最后生成的exe文件會相當的大,因為將需要的lib都加載到了最終的exe中。

(補充:VS程序編譯過程:預處理(.h文件展開、宏。。。。)——》編譯(每個.cpp分別編譯,)——》連接(鏈接靜態庫,即把lib中的函數實現插入並生成exe))這個后面專門寫個日志,詳細說說。

DLL文件

了解了上面的內容后,Dll的理解就方便多了。DLL文件被稱為動態鏈接庫。我們可以通過使用工程建立他們,在建立的時候首先建立一個空項目,然后將輸出設置成dll,然后在主函數前使用***,意思是將該文件函數以dll文件導出,然后編譯后生成了.lib文件和dll文件,其中的dll文件就是動態鏈接庫,但是要注意這里的.lib文件就是上面所說的另一種lib文件,不同於靜態鏈接庫的lib文件(該lib文件中貨真價實的是函數的實現),該lib文件中沒有函數的實現,而也是一些定義以及配置,真正的函數的實現存在於dll文件中。

  • 我們如何使用生成的.lib和dll文件呢?

要想使用dll文件,需要其對應的頭文件.h,lib以及動態鏈接庫dll文件。前兩者的配置和上面一樣,dll直接放到exe文件下即可。

  • lib和dll文件如何起作用?

當一個工程在編譯的時候,dll配套的lib文件將被使用,用來安插和dll文件的接口,但是不會將函數的實現放到最終的exe中,當exe程序在使用的時候,會動態的從對應的dll文件中調出需要的函數。因此這種方式使得exe文件不至於很大,而且方便應用程序的修改和升級。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM