国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Linux > 正文

Linux函數庫(靜態函數庫和動態函數庫)及其安裝過程

2024-08-27 23:57:00
字體:
來源:轉載
供稿:網友

linux 系統中存在大量的函數庫。簡單來講,函數庫就是一些函數的集合,每個函數都具有獨立的功能且能被外界調用。我們在編寫代碼時,有些功能根本不需要自己實現,直接調用函數庫中的函數即可。

需要注意的是,函數庫中的函數并不是以源代碼的形式存在的,而是經過編譯后生成的二進制文件,這些文件無法獨立運行,只有鏈接到我們編寫的程序中才可以運行。

Linux 系統中的函數庫分為 2 種,分別是靜態函數庫(簡稱靜態庫)和動態函數庫(也稱為共享函數庫,簡稱動態庫共享庫),兩者的主要區別在于,程序調用函數時,將函數整合到程序中的時機不同:

  • 靜態函數庫在程序編譯時就會整合到程序中,換句話說,程序運行前函數庫就已經被加載。這樣做的好處是程序運行時不再需要調用外部函數庫,可直接執行;缺點也很明顯,所有內容都整合到程序中,編譯文件會比較大,且一旦靜態函數庫改變,程序就需要重新編譯。

  • 動態函數庫在程序運行時才被加載(如圖 1 所示),程序中只保存對函數庫的指向(程序編譯僅對其做簡單的引用)。

    圖 1 函數庫調用
    使用動態函數庫的好處是,程序生成的可執行程序體積比較小,且升級函數庫時無需對整個程序重新編譯;缺點是,如果程序執行時函數庫出現問題,則程序將不能正確運行。

Linux 系統中,靜態函數庫文件擴展名是 ".a",文件通常命令為 libxxx.a(xxx 為文件名);動態函數庫擴展名為 ".so",文件通常命令為 libxxx.so.major.minor(xxx 為文件名,major 為主版本號,minor 為副版本號)。


目前,Linux 系統中大多數都是動態函數庫(主要考慮到軟件的升級方便),其中被系統程序調用的函數庫主要存放在 "/usr/lib" 和 "/lib" 中;Linux 內核所調用的函數庫主要存放在 "/lib/modules" 中。

注意,函數庫(尤其是動態函數庫)的存放位置非常重要,輕易不要做更改。

Linux 函數庫的安裝

Linux 發行版眾多,不同 Linux 版本安裝函數庫的方式不同。CentOS 中,安裝函數庫可直接使用 yum 命令。

例如,安裝 curses 函數庫命令如下:

[root@Linux ~]# yum install ncurses-devel


正常情況下,函數庫安裝完成后就可以直接被系統識別,但凡事都有萬一。這里先想一個問題,如何查看可執行程序調用了哪些函數庫呢?通過以下命令即可:

[root@localhost ~]# ldd -v 可執行文件名

-v 選項的含義是顯示詳細版本信息(不是必須使用)。

例如,查看 ls 命令調用了哪些函數庫,命令如下:

[root@localhost ~]# ldd /bin/ls
linux-gate.so.1 => (0x00d56000)
libselinux.so.1 =>/lib/libselinux.so.1 (0x00cc8000)
librt.so.1 =>/lib/librt.so.1 (0x00cb8000)
libcap.so.2 => /lib/libcap.so.2 (0x00160000)
libacl.so.1 => /lib/libacl.so.1 (0x00140000)
libc.so.6 => /lib/libc.so.6 (0x00ab8000)
libdl.so.2 => /lib/libdl.so.2 (0x00ab0000)
/lib/ld-linux.so.2 (0x00a88000)
libpthread.so.0 => /lib/libpthread.so.0 (0x00c50000)
libattr.so.1 =>/lib/libattr.so.1 (0x00158000)

如果函數庫安裝后仍無法使用(運行程序時會提示找不到某個函數庫),這時就需要對函數庫的配置文件進行手動調整,也很簡單,只需進行如下操作:

  1. 將函數庫文件放入指定位置(通常放在 "/usr/lib" 或 "/lib" 中),然后把函數庫所在目錄寫入 "/etc/ld.so.conf" 文件。例如:

    [root@localhost ~]# cp *.so /usr/lib/
    #把函數庫復制到/usr/lib/目錄中
    [root@localhost ~]# vi /etc/ld.so.conf
    #修改函數庫配置文件
    include ld.so.conf.d/*.conf
    /usr/lib
    #寫入函數庫所在目錄(其實/usr/lib/目錄默認已經被識別)

    注意,這里寫入的是函數庫所在的目錄,而不單單是函數庫的文件名。另外,如果自己在其他目錄中創建了函數庫文件,這里也可以直接在 "/etc/ld.so.conf" 文件中寫入函數庫文件所在的完整目錄。

  2. 使用 ldconfig 命令重新讀取 /etc/ld.so.conf 文件,把新函數庫讀入緩存。命令如下:

    [root@localhost ~]# ldconfig
    #從/etc/ld.so.conf文件中把函數庫讀入緩存
    [root@localhost ~]# ldconfig -p
    #列出系統緩存中所有識別的函數庫

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 独山县| 五大连池市| 呼伦贝尔市| 潜江市| 泰来县| 莲花县| 米易县| 阿荣旗| 江阴市| 沛县| 台湾省| 西丰县| 河北区| 黄陵县| 颍上县| 呼和浩特市| 沂源县| 米脂县| 武宁县| 富民县| 大港区| 九台市| 遂溪县| 裕民县| 沁水县| 新余市| 卢氏县| 城口县| 宣汉县| 余庆县| 札达县| 静宁县| 志丹县| 长岛县| 金山区| 赤水市| 乌兰浩特市| 和政县| 南陵县| 泸州市| 八宿县|