欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

linux安裝動態(tài)庫命令,linux使用動態(tài)庫

linux一個應(yīng)用多個版本動態(tài)庫命令

Linux 系統(tǒng),也同樣面臨和Window一樣的問題,如何控制動態(tài)庫的多個版本問題。Window之前沒有處理好,為此專門有個名詞來形容這個問題 “Dll hell”,其嚴重影響軟件的升級和維護。 Dll hell 是指windows 上動態(tài)庫新版本覆蓋舊版本,但是卻不兼容老版本。常常發(fā)生在程序升級之后,動態(tài)庫更新,原有程序運行不起來;或者裝新軟件,但是已有的軟件運行不起來。 同樣Linux操作系統(tǒng),也有同樣的問題,那么它是怎么解決的呢?

在金昌等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強發(fā)展的系統(tǒng)性、市場前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供網(wǎng)站設(shè)計制作、做網(wǎng)站 網(wǎng)站設(shè)計制作按需制作網(wǎng)站,公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),品牌網(wǎng)站制作,營銷型網(wǎng)站,成都外貿(mào)網(wǎng)站制作,金昌網(wǎng)站建設(shè)費用合理。

Linux 為解決這個問題,引入了一套機制,如果遵守這個機制來做,就可以避免這個問題。 但是這只事一個約定,不是強制的。但是建議遵守這個約定,否則同樣也會出現(xiàn) Linux 版的Dll hell 問題。 下面來介紹一個這個機制。 這個機制是通過文件名,來控制dll (shared library) 的版本。

Linux 上的Dll ,叫shared library,其有三個名字,分別有不同的目的。

第一個是共享庫本身的文件名(real name),其通常包含版本號,常常是是這樣: libmath.so.1.1.1234 。 lib是Linux 上的庫的約定前綴,math 是共享庫名字,so 是共享庫的后綴名,1.1.1234的是共享庫的版本號,其主版本號+小版本號+build號。主版本號,代表當(dāng)前動態(tài)庫的版本,如果動態(tài)庫的接口有變化,那么這個版本號就要加1;后面的兩個版本號(小版本號 和 build 號)是告訴你詳細的信息,比如為一個hot-fix 而生成的一個版本,其小版本號加1,build號也應(yīng)有變化。 這個文件名包含共享庫的代碼。

第二個是動態(tài)庫的soname( Short for shared object name),其是應(yīng)用程序加載dll 時候,其尋找共享庫用的文件名。其格式為

lib + math+.so + ( major version number)

其只包含major version number,換句話說,也就是只要其接口沒有變,應(yīng)用程序都可以用,不管你其后minor build version or build version。

問題來了,程序運行時怎么通過soname 找個real name? Soname 存在哪里?如果與real name 關(guān)聯(lián)起來?什么時候存的?

這就是接下來要介紹的第三個共享庫的名字,link name,顧名思義,就是在編譯過程,link 階段用的文件名。 其將sonmae 和real name 關(guān)聯(lián)起來。

第三個名字,共享庫的連接名(link name),是專門為build 階段連接而用的名字。這個名字就是lib + math +.so ,比如libmath.so。其是不帶任何版本信息的。在共享庫編譯過程中,連接(link) 階段,編譯器將生成一個共享庫及real name,同時將共享庫的soname,寫在共享庫文件里的文件頭里面。可以用命令 readelf -d sharelibrary 去查看。

Linux下的靜態(tài)庫和動態(tài)庫

靜態(tài)庫

可以把它想象成是一些代碼的集合,在可執(zhí)行程序運行前就已經(jīng)加到了代碼中,成為了執(zhí)行程序的一部分,一般是以.a為后綴的文件名,Windows下后綴為.lib。靜態(tài)庫的命名也分為三部分,1、前綴:lib,2、庫的名稱:隨意,如lisi,3、后綴:.a。

靜態(tài)庫優(yōu)缺點

上面簡單介紹了靜態(tài)庫,那它自然也會有優(yōu)缺點,這里來介紹下它的優(yōu)缺點。

優(yōu)點:1、在最后,函數(shù)庫是被打包到應(yīng)用程序中的,實現(xiàn)函數(shù)本地化、尋址方便、高效。2、程序在運行的時候,與函數(shù)庫沒有關(guān)系,移植性更強。

缺點:1、消耗資源較大,每個進程在使用靜態(tài)庫的時候,都要復(fù)制一份才可以,這也就造成了內(nèi)存的消耗。2、在程序更新、部署、發(fā)布的時候,使用靜態(tài)庫相對麻煩,如果一個靜態(tài)庫更新了,那它的應(yīng)用程序都需要重新編譯,再發(fā)送給用戶,有的時候可能只是一個小的改動,但對于用戶來說,會導(dǎo)致整個程序重新下載。

動態(tài)庫

在程序編譯時不會被連接到目標(biāo)代碼中,在后期運行時才會載入,不同的應(yīng)用程序如果調(diào)用相同的庫,內(nèi)存中只有一份共享庫的拷貝,也就避免了空間的浪費問題。一般以.so作為文件后綴名,也分為三部分:1、前綴:lib,2、庫名稱:自定義,3、后綴:.so

動態(tài)庫優(yōu)缺點

優(yōu)點:1、節(jié)省內(nèi)存2、部署、升級相對方便,只需要更換動態(tài)庫,再重新啟動服務(wù)即可。

缺點:1、加載速度比靜態(tài)庫慢2、移植性較差,需要把所有用到的動態(tài)庫進行移植。

Linux查看某個庫是否安裝

查看某個庫是否安裝命令:

為了讓動態(tài)鏈接庫為系統(tǒng)所共享,還需運行動態(tài)鏈接庫的管理命令 ldconfig 。此執(zhí)行程序存放在/sbin目錄下。

ldconfig命令的用途,主要是在默認搜尋目錄(/lib和/usr/lib)以及動態(tài)庫配置文件/etc/ld.so.conf內(nèi)所列的目錄下,搜索出可共享的動態(tài)鏈接庫(格式如前介紹,lib .so ),進而創(chuàng)建出動態(tài)裝入程序(ld.so)所需的連接和緩存文件。緩存文件默認為/etc/ld.so.cache,此文件保存已排好序的動態(tài)鏈接庫名字列表。

ldconfig通常在系統(tǒng)啟動時運行,而當(dāng)用戶安裝了一個新的動態(tài)鏈接庫時,就需要手工運行這個命令。

1、往/lib和/usr/lib里面加?xùn)|西,是不用修改/etc/ld.so.conf文件的,但是添加完后需要調(diào)用下ldconfig,不然添加的library會找不到。

2、如果添加的library不在/lib和/usr/lib里面的話,就一定要修改/etc/ld.so.conf文件,往該文件追加library所在的路徑,然后也需要重新調(diào)用下ldconfig命令。比如在安裝MySQL的時候,其庫文件/usr/local/mysql/lib,就需要追加到/etc/ld.so.conf文件中。命令如下:

3、如果添加的library不在/lib或/usr/lib下,但是卻沒有權(quán)限操作寫/etc/ld.so.conf文件的話,這時就需要往export里寫一個全局變量LD_LIBRARY_PATH,就可以了。

參考:

1、 linux中l(wèi)dconfig命令 以及 添加動態(tài)庫自動搜索路徑

2、 linux中l(wèi)dconfig的使用介紹

3、 Linux 共享庫: LD_LIBRARY_PATH 與ld.so.conf

分享題目:linux安裝動態(tài)庫命令,linux使用動態(tài)庫
文章分享:http://chinadenli.net/article14/heocge.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站營銷網(wǎng)站導(dǎo)航品牌網(wǎng)站建設(shè)電子商務(wù)App設(shè)計小程序開發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

外貿(mào)網(wǎng)站制作