自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Linux與Windows系統(tǒng)下的庫(kù)比較

系統(tǒng) Linux
庫(kù)提供一些可以給別的程序調(diào)用的東西,別的程序要調(diào)用它必須以某種方式指明它要調(diào)用之。所以本文章對(duì)比Linux和Windows來(lái)介紹下庫(kù),讓大家認(rèn)識(shí),并掌握他。

庫(kù)的定義

    庫(kù)文件是一些預(yù)先編譯好的函數(shù)的集合,那些函數(shù)都是按照可再使用的原則編寫(xiě)的。它們通常由一組互相關(guān)聯(lián)的用來(lái)完成某項(xiàng)常見(jiàn)工作的函數(shù)構(gòu)成,從本質(zhì)上來(lái)說(shuō)庫(kù)是一種可執(zhí)行代碼的二進(jìn)制形式,可以被操作系統(tǒng)載入內(nèi)存執(zhí)行。

無(wú)論在 Windows 平臺(tái)還是 Linux 平臺(tái)下都存在大量的庫(kù),但由于Windows和Linux的本質(zhì)不同,因此二者的庫(kù)的二進(jìn)制是不兼容的。

庫(kù)的分類

Windows下的庫(kù)有兩種:靜態(tài)庫(kù)(.lib)和動(dòng)態(tài)鏈接庫(kù)(.dll)。

Linux下的庫(kù)有兩種:靜態(tài)庫(kù)(.a)和共享庫(kù)(.so)。

Linux下的靜態(tài)庫(kù)的名字一般為libxxxx.a,其中xxxx是該lib的名稱

Linux下的動(dòng)態(tài)庫(kù)的名字一般為libxxxx.so.major.minor,xxxx是該lib的名稱,major是主版本號(hào),minor是副版本號(hào)。

Windows下的庫(kù)與Linux下的庫(kù)的異同

    Linux 的共享庫(kù)(.so)就象Windows的動(dòng)態(tài)鏈接庫(kù)(.dll),它里面包含有很多程序常用的函數(shù)。為了方便程序開(kāi)發(fā)和減少程序的冗余,程序當(dāng)中就不用包 含每個(gè)常用函數(shù)的拷貝,只是在需要時(shí)調(diào)用共享庫(kù)中常函數(shù)即可。這種方式我們稱之為動(dòng)態(tài)鏈接(Dynamically Linked)。而有時(shí)我們不希望叫程序去調(diào)用共享庫(kù)的函數(shù),而是把庫(kù)函數(shù)代碼直接鏈接進(jìn)程序代碼中,也就是說(shuō),在程序本身?yè)碛幸环莨蚕韼?kù)中函數(shù)的副本。 這種方式我們稱之為靜態(tài)鏈接(Statically Linked)。

所以,簡(jiǎn)單的講靜態(tài)庫(kù)和共享庫(kù)(動(dòng)態(tài)庫(kù))的不同點(diǎn)在于代碼被載入的時(shí)刻不同。

靜態(tài)庫(kù)的代碼在編譯過(guò)程中已經(jīng)被載入可執(zhí)行程序,因此體積較大。

共享庫(kù)的代碼是在可執(zhí)行程序運(yùn)行時(shí)才載入內(nèi)存的,在編譯過(guò)程中僅簡(jiǎn)單的引用,因此代碼體積較小。

Windows下的動(dòng)態(tài)鏈接庫(kù)(.dll)與Linux下的共享庫(kù)(.so)的差別

    .dll文件事實(shí)上和.exe文件一樣,同屬 PE 格式的執(zhí)行文件。對(duì)于隱式的引用外部符號(hào),需要把外部符號(hào)所在的位置寫(xiě)在PE頭上。PE加載器將從PE頭上找到依賴的符號(hào)表,并加載依賴的其它.dll文件。

    而在Linux 上并非如此!.so文件大多為elf執(zhí)行文件格式。當(dāng)它們需要的外部符號(hào),可以不寫(xiě)明這些符號(hào)所在的位置。也就是說(shuō),通常.so文件本身并不知道它依賴的那些符號(hào)在哪些.so里面。這些符號(hào)是由調(diào)用dlopen的進(jìn)程運(yùn)行時(shí)提供的。

    我們?cè)赪indows下做一個(gè).dll文件時(shí)還需要攜帶一個(gè).lib文件;而在Linux下一般只需要有相應(yīng)的頭文件就夠了。對(duì)于編寫(xiě)新的.so,找不到的 符號(hào)可以就讓它在那里,直到最終執(zhí)行文件來(lái)把所有需要的符號(hào)聯(lián)合到一起。windows 可以存在一個(gè).dll對(duì)另一個(gè).dll的隱式依賴;而Linux下一般不需要讓.so和.so有隱式依賴關(guān)系。

通過(guò)上文介紹,大家對(duì)庫(kù)的概念有了一定的了解,知道了Linux與Windows系統(tǒng)下的庫(kù)的不同,希望大家在學(xué)習(xí)和工作中能多對(duì)Linux進(jìn)行深一步了解。

【編輯推薦】

  1. 簡(jiǎn)單敘述linux windows區(qū)別
  2. 因用戶不習(xí)慣Linux Windows上網(wǎng)本后來(lái)居上
  3. 詳述三種Linux windows雙系統(tǒng)共存問(wèn)題
  4. Linux文件系統(tǒng)知識(shí)大揭秘
  5. Linux Kernel 2.6.37發(fā)布 Ext4性能提升
  6. 微軟宣布下一代Windows支持ARM處理器
  7. Windows 7安全性需要你知道的五件事
  8. 帶您了解SQL Sever數(shù)據(jù)庫(kù)文件
  9. 3.4 Flex庫(kù)文件SWC

 

 

責(zé)任編輯:趙鵬
相關(guān)推薦

2010-04-28 17:46:19

2019-12-17 08:39:21

Linuxwindowsoracle

2009-07-03 12:05:14

2010-05-12 15:34:26

MySQL編碼設(shè)置

2014-08-14 17:11:51

LinuxWindows

2017-04-13 13:00:27

LinuxWindowstomcat

2012-07-13 15:29:49

2017-09-12 14:14:05

2011-01-10 15:55:20

LinuxWindowsWine

2011-09-08 09:46:29

ubuntuMySQL

2011-03-31 11:03:51

系統(tǒng)遷移

2016-11-25 20:52:14

Linux

2021-12-25 23:25:04

LinuxDocker容器

2012-08-27 13:20:00

CentosUbuntu

2011-08-19 09:21:42

2009-03-18 08:50:59

LinuxWindows系統(tǒng)目錄

2009-12-31 09:22:36

2010-01-04 09:33:03

2012-11-05 09:46:17

路由器操作系統(tǒng)瀏覽器

2015-11-27 15:28:45

WindowsLinuxEasyBCD
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)