靜態連結 和 動態連結

來源:互聯網
上載者:User

說了好久的動態庫,靜態庫,直到今天才弄明白到底這些東西是怎麼回事。

 

需要注意的是三點:

1. 對於庫檔案來說,只有一種,那就是 *.lib 庫檔案,在這個檔案裡面是未經編譯的函數集合,不能直接用的。它需要和各種 .obj  這種中間的目標檔案一起參加連結,最後產生可執行檔。這裡的可執行檔可以是 exe , 也可以是 dll , 各種……

        這其實就叫做使用庫檔案。

2. 靜態連結,static linked dll

    靜態連結是 在一個程式裡,如果需要用到其他程式裡的函數功能,就可以只包含 .h 標頭檔和 .lib 庫引導檔案, 這個.lib引導檔案裡面並沒有真正的函數功能實現,只是一些系統引導資訊。

    如果我們選擇靜態連結這個.h 和 .lib 所對應的 .dll  的話,在我們的程式開始啟動並執行時候,即使這時候還不需要用到 .dll 裡面的功能,這個.dll也已經被載入到整個程式裡面了,到真正用到的函數的時候就可以直接用了。

    而如果我們選擇了動態連結的方式來載入這個 dll, 在程式裡面通常要用到 loadlibrary(*.dll) 這樣的語句, 這就是說在我們的程式開始啟動並執行時候,並不載入進來這個 dll, 而是到LoadLibrary()這條語句的時候才會把它載入進來,所以說,選擇動態連結的可執行程式體積要比選擇靜態連結的可執行程式的體積小,因為對於動態連結來說,dll不是程式的一部分,也正是因為這個原因,靜態連結在啟動並執行時候,尤其是在使用到dll功能的時候就要比使用動態連結的程式要快一些。

 

 

    所謂靜態連結和動態連結都是一種工程和其他可執行檔 dll 之間結合的一種連結方式。

    而庫檔案就只是 .lib 這一種。無論採用靜態連結還是動態連結,產生的真正的連結庫就都是 DLL。

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.