真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

linux查看動態(tài)庫命令 linux獲取動態(tài)庫路徑

linux下的靜態(tài)庫與動態(tài)庫的區(qū)別和使用

一、引言

創(chuàng)新互聯(lián)憑借在網(wǎng)站建設(shè)、網(wǎng)站推廣領(lǐng)域領(lǐng)先的技術(shù)能力和多年的行業(yè)經(jīng)驗,為客戶提供超值的營銷型網(wǎng)站建設(shè)服務(wù),我們始終認為:好的營銷型網(wǎng)站就是好的業(yè)務(wù)員。我們已成功為企業(yè)單位、個人等客戶提供了做網(wǎng)站、成都做網(wǎng)站服務(wù),以良好的商業(yè)信譽,完善的服務(wù)及深厚的技術(shù)力量處于同行領(lǐng)先地位。

我們通常把一些公用函數(shù)制作成函數(shù)庫,供其它程序使用。

函數(shù)庫分為靜態(tài)庫和動態(tài)庫兩種。

通常情況下,對函數(shù)庫的鏈接是放在編譯時期(compile time)完成的。所有相關(guān)的對象文件(object file)與牽涉到的函數(shù)庫(library)被鏈接合成一個可執(zhí)行文件(executable file)。程序在運行時,與函數(shù)肢轎好庫再無瓜葛,因為所有需要的函數(shù)已拷貝到相應(yīng)目錄下下。所以這些函數(shù)庫被成為靜態(tài)庫(static libaray),通常文件名為“l(fā)ibxxx.a”的形式。

其實,我們也可以把對一些庫函數(shù)的鏈接載入推遲到程序運行的時期(runtime)。這就是動態(tài)鏈接庫(dynamic link library)技術(shù)。

二、兩者區(qū)別:

a,靜態(tài)庫的使用需要:

1 包含一個對應(yīng)的頭文件告知編譯器lib文件里面的具體內(nèi)容

2 設(shè)置lib文件允許編譯器去查找已經(jīng)編譯好的二進制代碼

b,動態(tài)庫的使用:

程序運行時需要加載動態(tài)庫,對動態(tài)庫有依賴性,需要手動加入動態(tài)庫

c,依賴性:

靜態(tài)鏈接表示靜態(tài)性,在編譯鏈接之后, lib庫中需要的資源已經(jīng)在可執(zhí)行程序中了, 也就是靜態(tài)存在,沒有依賴性了

動態(tài),就是實時性,在運行的時候載入需要的資源,那么必須在運行的時候提供 需要的 動態(tài)庫,有依賴性, 運行時候沒有找到庫就不能運行了

d,區(qū)別:

簡單講,靜態(tài)庫就是直接將需要的代碼連接進可執(zhí)行程序;動態(tài)庫就是在需要調(diào)用其中的函數(shù)時,根據(jù)函數(shù)映射表找到該函數(shù)然后調(diào)入堆棧執(zhí)行。

做成靜態(tài)庫可執(zhí)行文件本身比較大,但不必附帶動態(tài)庫

做成動態(tài)庫可執(zhí)行文件本身比較小,但需要附帶動態(tài)庫

鏈接靜態(tài)庫,編譯的可執(zhí)行文件比較大,當然可以用strip命令精簡一下(如:strip libtest.a),但還是要比鏈接動態(tài)庫的可執(zhí)行文件大。程序運行時間速度稍微快一點。

靜態(tài)庫是程序運行的時候已經(jīng)調(diào)入內(nèi)存,不管有沒有調(diào)用,都會在內(nèi)存里頭。靜態(tài)庫在程序編譯時會被連接到目標代碼中,程序運行時將不再需要該靜態(tài)庫。

其在編譯程序時若鏈接,程序運行時會在系統(tǒng)指定的路徑下搜索,然后導(dǎo)入內(nèi)存,程序一般執(zhí)行時間稍微長一點,但編譯的可執(zhí)行文件比較?。粍討B(tài)庫是程序運行的時候需要調(diào)用的時候才裝入內(nèi)存,不需要的時候是不會裝入內(nèi)存的。

動態(tài)庫在程序編譯時并不會被連接到目標代碼中,而是在程序運行是才被載入,因此在程序運行時還需要動態(tài)庫存在。

三、動態(tài)鏈接庫的特點與優(yōu)勢

首先讓我們來看一下,把庫函數(shù)推遲到程序運行時期載入的好處:

1. 可以實現(xiàn)進程之間的資源共享。

什么概念呢?就是說,某個程序的在運行中要調(diào)用某個動態(tài)鏈接庫函數(shù)的時候,操作系統(tǒng)首先會查看所有正在運行的程序,看在內(nèi)存里是否已有此庫函數(shù)的拷貝了。如果有,則讓其共享那一個拷貝;只有沒有才鏈接載入。這樣的模式雖然會帶來一些“動態(tài)鏈接”額外的開銷,卻大大的節(jié)省了系統(tǒng)的內(nèi)存資源。C的標準庫就是動態(tài)鏈接庫,也就是說系統(tǒng)中所有歷鉛運行的程序共享著同一個C標準庫的代碼段。

2. 將一些程序升級變得簡單。用戶只需要升級動態(tài)鏈接庫,而無需重新編譯鏈接其他原有的代碼就可以完成整個程序的升級。Windows 就是一個很好的例子。

3. 甚至可以真正坐到鏈接載入完全由程序員在程序代碼中控制。

程序員在編寫程序的時候,可以明確的指明什么時候或者什么情況下,鏈接載入哪個動態(tài)鏈接庫函數(shù)。你可以有一個相當大的軟件,但每次運行的時候,由于不同的操作需求,只有一小部分程序被載入內(nèi)存。所有的函數(shù)本著“有需求才調(diào)入”的原則,于是大大節(jié)省了系統(tǒng)資源。比如現(xiàn)在的軟件通常都能打開若干種不同類型的文件,這些讀寫操作通常都用動態(tài)鏈接庫來實現(xiàn)。在一次運行當中,一般只有一種類型的文件將會被打開。所以直到程序知道文件的類型以后再載入相應(yīng)的讀寫函數(shù),而不是一開始就將所有的讀寫函數(shù)都載入,帆散然后才發(fā)覺在整個程序中根本沒有用到它們。

靜態(tài)庫:在編譯的時候加載生成目標文件,在運行時不用加載庫,在運行時對庫沒有依賴性。

動態(tài)庫:在目標文件運行時加載,手動加載,且對庫有依賴性。

具體在開發(fā)中用到哪種庫,我覺得還是根據(jù)實際的內(nèi)存大小,ROM大小,運行的速度等綜合考慮。


本文名稱:linux查看動態(tài)庫命令 linux獲取動態(tài)庫路徑
當前路徑:http://weahome.cn/article/dspgjec.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部