日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

VS2015 编译输出的*.lib,*.dll,*.exe的区别

發布時間:2025/3/21 53 豆豆
生活随笔 收集整理的這篇文章主要介紹了 VS2015 编译输出的*.lib,*.dll,*.exe的区别 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

VS2015編譯完C++程序后,一般會在Release或者Debug文件路徑下生成多個文件:

例如:輸出文件夾下會出現這些文件:*.exe,*.ilk,*.obj,*.pch,*.pdb,*.idb,*,pdb;*.cpp,*.dsp,*.ncb,*.plg

(1)生成可執行文件(路徑——.\ceshi\x64\Release)

其中,ceshi.exe:是生成的可執行文件;ceshi.obj:是目標文件,源程序編譯后的產物;*.pdb:全稱是Program DataBase,即程序數據庫文件,用來記錄調試信息

(2)生成靜態庫(路徑——.\ceshi\x64\Release)

其中,dongtaiku.lib:是一個二進制文件,與dll類似,供其他程序調用。區別是:dll是運行時需要的,lib是編譯時需要的。

(3)生成動態鏈接庫(路徑——.\ceshi\x64\Release)

其中,*.ilk:當選定漸增型編譯連接時,連接器自動生成ILK文件,記錄連接信息;*.pch:全稱是PreCompiled Header,就是預先編譯好的頭文件;*.idb:文件保存的信息,使編譯器在重新編譯的時候只重編譯最新改動過的函數和只對最新類定義改動過的源文件進行重編譯,以提高編譯速度
? ? ? ? 另外,*.dsp:(全稱是Developer Studio Project)也是一個配置文件;*.ncb:(全稱No Compile Browser)的縮寫,其中存放了供ClassView、WizardBar和Component Gallery使用的信息,由VC開發環境自動生成;*.plg:實際上是一個超文本文件,可以用Internet Explorer打開,記錄了Build的過程;*.cpp:就是C++源代碼文件.

?

lib和dll的介紹

(1)lib是靜態的庫文件

(2)dll是動態的庫文件。 ??
? 所謂靜態就是link的時候把里面需要的東西抽取出來安排到你的exe文件中,供運行你的exe,這時候不再需要靜態庫lib。

所謂動態就是exe運行的時候依賴于dll里面提供的功能,沒有這個dll,你的exe無法運 ??
? 行。

lib, ? dll, ? exe都算是最終的目標文件,是最終產物——輸出

而c/c++屬于源代碼——輸入

源代碼和最終目標文件中過渡的就是中間代碼obj,實際上之所以需要中間代碼,是你不可能一次得到目標文件。比如說一個exe需要很多的cpp文件生成。而編譯器一次只能編譯一個cpp文件。這樣編譯器編譯好一個cpp以后會將其編譯成obj,當所有必須要的cpp都編譯成obj以后,再統一link成所需要的exe,應該說缺少任意一個obj都會導致exe的鏈接敗。
?

1.obj里存的是編譯后的代碼跟數據,并且有名稱,所以在連接時會出現未解決的外部符號一說。當連成exe后便不存在名稱的概念了,只有地址。lib就是一堆obj的組合。

?2.理論上可以,但實際中通常用lib。

?3.編譯器會默認鏈接一些常用的庫,其它的需要你自己指定。

lib和dll的區別

(1)lib是編譯時需要的,dll是運行時需要的。如果要完成源代碼的編譯,有lib就夠了。?
如果也使動態連接的程序運行起來,有dll就夠了。在開發和調試階段,當然最好都有。

(2)一般的動態庫程序有lib文件和dll文件。lib文件是必須在編譯期就連接到應用程序中的,而dll文件是運行期才會被調用的。如果有dll文件,那么對應的lib文件一般是一些索引信息,具體的實現在dll文件中。如果只有lib文件,那么這個lib文件是靜態編譯出來的,索引和實現都在其中。靜態編譯的lib文件有好處:給用戶安裝時就不需要再掛動態庫了。但也有缺點,就是導致應用程序比較大,而且失去了動態庫的靈活性,在版本升級時,同時要發布新的應用程序才行。

(3)在動態庫的情況下,有兩個文件,一個是引入庫(.LIB)文件,一個是DLL文件,引入庫文件包含被DLL導出的函數的名稱和位置,DLL包含實際的函數和數據,應用程序使用LIB文件鏈接到所需要使用的DLL文件,庫中的函數和數據并不復制到可執行文件中,因此在應用程序的可執行文件中,存放的不是被調用的函數代碼,而是DLL中所要調用的函數的內存地址,這樣當一個或多個應用程序運行是再把程序代碼和被調用的函數代碼鏈接起來,從而節省了內存資源。從上面的說明可以看出,DLL和.LIB文件必須隨應用程序一起發行,否則應用程序將會產生錯誤。

?

?

總結

以上是生活随笔為你收集整理的VS2015 编译输出的*.lib,*.dll,*.exe的区别的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。