obj,lib,dll,exe

來源:互聯網
上載者:User

obj,lib,dll,exe的關係

    lib是和dll對應的。lib是靜態連結庫的庫檔案,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.理論上可以串連obj檔案來引用其他工程(可以認為一個obj檔案等價於編譯產生它的cpp檔案,可以引用obj來替換cpp,也可以添加cpp來替換obj

),但實際中通常用lib來實現工程間相互引用。

    3.編譯器會預設連結一些常用的庫,其它的需要你自己指定。

   
lib和DLL的區別

    (1)lib是編譯時間需要的,dll是運行時需要的。如果要完成原始碼的編譯,有lib就夠了。如果也使動態串連的程式運行起來,有dll就夠了

。在開發和調試階段,當然最好都有。

    (2) 一般的動態庫程式有lib檔案和dll檔案。lib檔案是必須在編譯期就串連到應用程式中的,而dll檔案是運行期才會被調用的。如果有dll檔案,那麼對應的lib檔案一般是一些索引資訊,具體的實現在dll檔案中。如果只有lib檔案,那麼這個lib檔案是靜態編譯出來的,索引和實現都在其中。

靜態編譯的lib檔案有好處:給使用者安裝時就不需要再掛動態庫了。但也有缺點,就是導致應用程式比較大,而且失去了動態庫的靈活性,在版本升級時,同時要發布新的應用程式才行。

    (3)在動態庫的情況下,有兩個檔案,一個是引入庫(.LIB)檔案(實際上也算是一個靜態庫,只是在連結時只能把函數在DLL的入口連結到exe中,而不像真正靜態連結庫那樣將函數體真正連結到exe中

,通過lib進行的動態連結實際上也使用了靜態連結來實現

),一個是DLL檔案,引入庫檔案包含被DLL匯出的函數的名稱和位置,DLL包含實際的函數和資料,應用程式使用LIB檔案連結到所需要使用的DLL檔案,庫中的函數和資料並不複製到可執行檔中,因此在應用程式的可執行檔中,存放的不是被調用的函數代碼,而是DLL中所要調用的函數的記憶體位址,這樣當一個或多個應用程式運行是再把程式碼和被調用的函數代碼連結起來,從而節省了記憶體資源。從上面的說明可以看出,DLL和.LIB檔案必須隨應用程式一起發行,否則應用程式將會產生錯誤。

DLL內的函數分為兩種:

    (1)DLL匯出函數,可供應用程式調用;

    (2)DLL內建函式,只能在DLL程式使用,應用程式無法調用它們

建立靜態連結庫和建立動態連結程式庫

    VC6中建立[Win32 Dynamic-Link Library]工程便可以建立出一個空的DLL工程.

    VC6中建立[Win32 Static Library]工程便可以建立出一個空的LIB工程(靜態連結庫工程,僅產生一個lib檔案).

添加lib檔案的常用辦法有二個:

    1、把*.lib放在VC的Lib目錄中

    2、修改project setting的Link->Input中的Addtional library path,加入你的目錄dll:是可實際啟動並執行二進位代碼,有定位代碼的!

    3、也可以在object/library中直接寫上lib檔案路徑.(這裡實際上是可以寫上任意obj檔案或者lib檔案的).

有個個人的方法:當有時間提示缺少某個標示符什麼的時候,通過檔案搜尋工具(TC可以直接搜尋二進位檔案的)搜尋這個標識符(一般函數名),找到它被放到哪裡了,然後引用就好了,:-)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.