ld.so.conf和lib庫

/lib是內核級別的
/usr/lib是系統級別的
/usr/local/lib是用戶級別的

/etc/ld.so.conf詳解

Linux 系統上有兩類根本不同的 Linux 可執行程序。第一類是靜態鏈接的可執行程序。靜態可執行程序包含執行所需的所有函數 — 換句話說,它們是“完整的”。因爲這一原因,靜態可執行程序不依賴任何外部庫就可以運行。

第二類是動態鏈接的可執行程序。

  靜態可執行程序與動態可執行程序比較

我們可以用 ldd 命令來確定某一特定可執行程序是否爲靜態鏈接的:
# ldd /sbin/sln
not a dynamic executable
“not a dynamic executable”是 ldd 說明 sln 是靜態鏈接的一種方式。現在,讓我們比較 sln 與其非靜態同類 ln 的大小:
# 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 小這麼多是因爲它是動態可執行程序。動態可執行程序是不完整的程序,它依靠外部共享庫來提供運行所需的許多函數。

  動態鏈接相關性

  要查看 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。通常,動態鏈接的程序比其靜態鏈接的等價程序小得多。不過,靜態鏈接的程序可以在某些低級維護任務中發揮作用。例如

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章