Linux與Windows系統下的庫比較

來源:互聯網
上載者:User

庫的定義

庫檔案是一些預先編譯好的函數的集合,那些函數都是按照可再使用的原則編寫的。它們通常由一組互相關聯的用來完成某項常見工作的函數構成,從本質上來說庫是一種可執行代碼的二進位形式,可以被作業系統載入記憶體執行。

無論在 Windows 平台還是 Linux 平台下都存在大量的庫,但由於Windows和Linux的本質不同,因此二者的庫的二進位是不相容的。

庫的分類

Windows下的庫有兩種:靜態庫(.lib)和動態連結程式庫(.dll)。

Linux下的庫有兩種:靜態庫(.a)和共用庫(.so)。

Linux下的靜態庫的名字一般為libxxxx.a,其中xxxx是該lib的名稱

Linux下的動態庫的名字一般為libxxxx.so.major.minor,xxxx是該lib的名稱,major是主要版本號,minor是副版本號碼。

Windows下的庫與Linux下的庫的異同

Linux 的共用庫(.so)就象Windows的動態連結程式庫(.dll),它裡麵包含有很多程式常用的函數。為了方便程式開發和減少程式的冗餘,程式當中就不用包 含每個常用函數的拷貝,只是在需要時調用共用庫中常函數即可。這種方式我們稱之為動態連結(Dynamically Linked)。而有時我們不希望叫程式去調用共用庫的函數,而是把庫函數代碼直接連結進程式碼中,也就是說,在程式本身擁有一份共用庫中函數的副本。 這種方式我們稱之為靜態連結Statically Linked)。

所以,簡單的講靜態庫和共用庫(動態庫)的不同點在於代碼被載入的時刻不同。

靜態庫的代碼在編譯過程中已經被載入可執行程式,因此體積較大。

共用庫的代碼是在可執行程式運行時才載入記憶體的,在編譯過程中僅簡單的引用,因此代碼體積較小。

Windows下的動態連結程式庫(.dll)與Linux下的共用庫(.so)的差別

.dll檔案事實上和.exe檔案一樣,同屬 PE 格式的執行檔案。對於隱式的引用外部符號,需要把外部符號所在的位置寫在PE頭上。PE載入器將從PE頭上找到依賴的符號表,並載入依賴的其它.dll檔案。

而在Linux 上並非如此!.so檔案大多為elf執行檔案格式。當它們需要的外部符號,可以不寫明這些符號所在的位置。也就是說,通常.so檔案本身並不知道它依賴的那些符號在哪些.so裡面。這些符號是由調用dlopen的進程運行時提供的。

我們在Windows下做一個.dll檔案時還需要攜帶一個.lib檔案;而在Linux下一般只需要有相應的標頭檔就夠了。對於編寫新的.so,找不到的 符號可以就讓它在那裡,直到最終執行檔案來把所有需要的符號聯合到一起。windows 可以存在一個.dll對另一個.dll的隱式依賴;而Linux下一般不需要讓.so和.so有隱式依賴關係。

通過上文介紹,大家對庫的概念有了一定的瞭解,知道了Linux與Windows系統下的庫的不同,希望大家在學習和工作中能多對Linux進行深一步瞭解。

  1. 簡單敘述linux windows區別
  2. 因使用者不習慣Linux Windows迷你筆記型電腦後來居上
  3. 詳述三種Linux windows雙系統共存問題
  4. Linux檔案系統知識大揭秘
  5. Linux Kernel 2.6.37發布 Ext4效能提升
  6. 微軟宣布下一代Windows支援ARM處理器
  7. Windows 7安全性需要你知道的五件事
  8. 帶您瞭解SQL Sever資料庫檔案
  9. 3.4 Flex庫檔案SWC

聯繫我們

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