小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

Linux 共享庫

 danydany_ok 2010-12-31

  Linux 共享庫 收藏

引用自:http://www./opera/showart.php?blogid=4512&id=73436

共享庫
介紹共享庫
Linux 系統(tǒng)上有兩類根本不同的 Linux 可執(zhí)行程序。第一類是靜態(tài)鏈接的可執(zhí)行程序。靜態(tài)可執(zhí)行程序包含執(zhí)行所需的所有函數(shù) 換句話說,它們是完整的。因為這一原因,靜態(tài)可執(zhí)行程序不依賴任何外部庫就可以運行。
第二類是動態(tài)鏈接的可執(zhí)行程序。

靜態(tài)可執(zhí)行程序與動態(tài)可執(zhí)行程序比較
我們可以用 ldd 命令來確定某一特定可執(zhí)行程序是否為靜態(tài)鏈接的:
# ldd /sbin/sln
        not a dynamic executable
not a dynamic executable是 ldd 說明 sln 是靜態(tài)鏈接的一種方式?,F(xiàn)在,讓我們比較 sln 與其非靜態(tài)同類 ln 的大?。?br># ls -l /bin/ln /sbin/sln
-rwxr-xr-x    1 root     root        23000 Jan 14 00:36 /bin/ln
-rwxr-xr-x    1 root     root       381072 Jan 14 00:31 /sbin/sln
如您所見,sln 的大小超過 ln 十倍。ln 比 sln 小這么多是因為它是動態(tài)可執(zhí)行程序。動態(tài)可執(zhí)行程序是不完整的程序,它依靠外部共享庫來提供運行所需的許多函數(shù)。


動態(tài)鏈接相關(guān)性


要查看 ln 依賴的所有共享庫的列表,可以使用 ldd 命令:
# ldd /bin/ln
        libc.so.6 => /lib/libc.so.6 (0x40021000)
        /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)


如您所見,ln 依賴外部共享庫 libc.so.6 和 ld-linux.so.2。通常,動態(tài)鏈接的程序比其靜態(tài)鏈接的等價程序小得多。不過,靜態(tài)鏈接的程序可以在某些低級維護任務(wù)中發(fā)揮作用。例如,sln 是修改位于 /lib 中的不同庫符號鏈接的極佳工具。但通常您會發(fā)現(xiàn)幾乎所有 Linux 系統(tǒng)上的可執(zhí)行程序都是某種動態(tài)鏈接的變體。

動態(tài)裝入器

那么,如果動態(tài)可執(zhí)行程序不包含運行所需的所有函數(shù),Linux 的哪部分負責(zé)將這些程序和所有必需的共享庫一起裝入,以使它們能正確執(zhí)行呢?答案是動態(tài)裝入器(dynamic loader),它實際上是您在 ln 的 ldd 清單中看到的作為共享庫相關(guān)性列出的 ld-linux.so.2 庫。動態(tài)裝入器負責(zé)裝入動態(tài)鏈接的可執(zhí)行程序運行所需的共享庫?,F(xiàn)在,讓我們迅速查看一下動態(tài)裝入器如何在系統(tǒng)上找到適當(dāng)?shù)墓蚕韼臁?/p>

ld.so.conf



動態(tài)裝入器找到共享庫要依靠兩個文件 /etc/ld.so.conf 和 /etc/ld.so.cache。如果您對 /etc/ld.so.conf 文件進行 cat 操作,您可能會看到一個與下面類似的清單:



$ cat /etc/ld.so.conf

/usr/X11R6/lib


/usr/lib/gcc-lib/i686-pc-linux-gnu/2.95.3


/usr/lib/mozilla


/usr/lib/qt-x11-2.3.1/lib


/usr/local/lib


ld.so.conf 文件包含一個所有目錄(/lib 和 /usr/lib 除外,它們會自動包含在其中)的清單,動態(tài)裝入器將在其中查找共享庫。


ld.so.cache


但是在動態(tài)裝入器能看到這一信息之前,必須將它轉(zhuǎn)換到 ld.so.cache 文件中??梢酝ㄟ^運行 ldconfig 命令做到這一點:


# ldconfig


當(dāng) ldconfig 操作結(jié)束時,您會有一個最新的 /etc/ld.so.cache 文件,它反映您對 /etc/ld.so.conf 所做的更改。從這一刻起,動態(tài)裝入器在尋找共享庫時會查看您在 /etc/ld.so.conf 中指定的所有新目錄。



 ldconfig 技巧



 要查看 ldconfig 可以看到的所有共享庫,請輸入: # ldconfig -p | less



 


還有另一個方便的技巧可以用來配置共享庫路徑。有時候您希望告訴動態(tài)裝入器在嘗試任何 /etc/ld.so.conf 路徑以前先嘗試使用特定目錄中的共享庫。在您運行的較舊的應(yīng)用程序不能與當(dāng)前安裝的庫版本一起工作的情況下,這會比較方便。

LD_LIBRARY_PATH


要指示動態(tài)裝入器首先檢查某個目錄,請將 LD_LIBRARY_PATH 變量設(shè)置成您希望搜索的目錄。多個路徑之間用逗號分隔;例如:


# export LD_LIBRARY_PATH="/usr/lib/old:/opt/lib"


導(dǎo)出 LD_LIBRARY_PATH 后,如有可能,所有從當(dāng)前 shell 啟動的可執(zhí)行程序都將使用 /usr/lib/old 或 /opt/lib 中的庫,如果仍不能滿足一些共享庫相關(guān)性要求,則轉(zhuǎn)回到 /etc/ld.so.conf 中指定的庫。


    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多