Linux 中的共享物件 (so) 檔名如何工作


簡介

Linux 是一個開源作業系統,它為使用者提供了廣泛的功能。Linux 的一個重要方面是使用共享物件 (so) 檔案。共享物件是 Linux 程式用來在不同程序之間共享程式碼和資料的檔案。在本文中,我們將討論共享物件檔名在 Linux 中的工作原理,並提供示例來說明這些概念。

什麼是共享物件 (so) 檔案?

共享物件是一種檔案型別,其中包含可以在 Linux 中多個程序之間共享的程式碼和資料。它們類似於 Windows 系統中的動態連結庫 (DLL)。當 Linux 程式需要使用共享物件時,它會將其載入到記憶體中並使用檔案中包含的程式碼和資料。

共享物件用於減小可執行檔案的大小並減少執行程式所需的記憶體量。它們還提供了一種在不同程式之間共享程式碼和資料的方法,從而實現更有效和模組化的程式設計。

共享物件檔名的工作原理

Linux 中的共享物件檔名遵循特定的命名約定,用於識別檔案及其內容。檔名由幾個部分組成,每個部分都提供有關檔案的資訊。

共享物件檔名的命名約定如下:

lib<name>.so.<major version>.<minor version>

檔名的各個部分為:

  • lib − 此字首表示該檔案是共享庫。

  • <name> − 這是庫的名稱。它通常是一個簡短的描述性名稱,用於識別庫的目的。

  • .so − 此後綴表示該檔案是共享物件。

  • <major version> − 此數字表示庫的主版本號。主版本號的更改表示庫的 API 或 ABI 的重大更改。

  • <minor version> − 此數字表示庫的次版本號。次版本號的更改表示庫的 API 或 ABI 的細微更改。

共享物件檔名的示例

讓我們來看一些共享物件檔名的示例,以瞭解它們是如何工作的。

libcrypto.so.1.1

此檔案名錶示該檔案是一個名為“crypto”的共享庫。主版本號為 1,次版本號為 1。這表示這是庫的第一個主版本,並且 API 或 ABI 有一些細微的更改。

libssl.so.1.1

此檔案名錶示該檔案是一個名為“ssl”的共享庫。主版本號為 1,次版本號為 1。這表示這是庫的第一個主版本,並且 API 或 ABI 有一些細微的更改。

libX11.so.6

此檔案名錶示該檔案是一個名為“X11”的共享庫。主版本號為 6,次版本號為 0。這表示這是庫的第六個主版本,並且 API 或 ABI 沒有發生任何細微的更改。

libgtk-3.so.0

此檔案名錶示該檔案是一個名為“gtk-3”的共享庫。主版本號為 0,次版本號為 0。這表示這是庫的第一個主版本,並且 API 或 ABI 沒有發生任何細微的更改。

共享物件檔案是如何找到的

共享物件在執行時由動態連結器搜尋並載入。動態連結器負責解析符號並將共享物件與程式的其餘部分連結起來。

動態連結器在幾個目錄中搜索共享物件,包括:

  • /lib

  • /usr

  • /usr/local/lib

  • LD_LIBRARY_PATH 環境變數中列出的目錄

當編譯程式時,它會包含一個它需要執行的共享物件依賴項列表。當程式執行時,動態連結器會在上面列出的目錄中搜索這些依賴項。如果找到所需的共享物件,它會將其載入到記憶體中並將其與程式連結起來。

如果找不到所需的共享物件,則程式將無法執行,並且會顯示錯誤訊息。要解決此問題,您可以安裝缺少的共享物件或將包含缺少的共享物件的目錄新增到 LD_LIBRARY_PATH 環境變數中。

共享物件的優勢

與靜態庫相比,共享物件提供了幾個優勢,包括:

  • 減少記憶體使用 − 共享物件僅在需要時載入到記憶體中,從而減少了執行程式所需的記憶體量。

  • 動態連結 − 共享物件允許程式在執行時連結庫,使它們能夠適應環境的變化,並且僅在需要時載入庫。

  • 程式碼可重用性 − 共享物件允許開發人員在不同的程式中重用程式碼,從而減少開發時間並提高程式碼的可維護性。

  • 更快的程式啟動 − 共享物件僅在需要時載入,從而減少了程式啟動時間並提高了程式效能。

主版本號與次版本號

共享物件檔名中的主版本號和次版本號提供有關庫與其他程式相容性的資訊。主版本號的更改表示庫的 API 或 ABI 的重大更改。使用舊版本庫的程式可能與新版本不相容。

次版本號的更改表示庫的 API 或 ABI 的細微更改。使用舊版本庫的程式應該仍然與新版本相容,但可能無法利用庫中的新功能或改進。

管理共享物件

管理 Linux 中的共享物件可能具有挑戰性,尤其是在處理庫之間的依賴關係時。以下是在 Linux 中管理共享物件的一些技巧:

  • 使用包管理器 − 大多數 Linux 發行版都帶有所需包管理器,允許您安裝和管理共享物件及其依賴項。使用包管理器可以幫助確保您的系統是最新的,並且您擁有所有必要的依賴項。

  • 避免修改系統目錄 − 修改 /lib 和 /usr 等系統目錄會導致動態連結器出現問題,並可能破壞其他程式。相反,將共享物件安裝到 /usr/local/lib 或您的主目錄等目錄中。

  • 使用符號連結 − 如果您有多個版本的共享物件,您可以使用符號連結指向當前版本。這可以幫助確保依賴共享物件的程式即使版本號更改也能找到它。

  • 檢查 LD_LIBRARY_PATH − 如果您遇到缺少共享物件的問題,請檢查 LD_LIBRARY_PATH 環境變數,以確保它包含包含所需共享物件的目錄。

結論

共享物件是 Linux 作業系統的重要組成部分。它們允許程式在程序之間共享程式碼和資料,從而減小可執行檔案的大小並減少執行程式所需的記憶體量。Linux 中的共享物件檔名遵循特定的命名約定,該約定提供有關檔案內容的資訊,包括庫的名稱、主版本號和次版本號以及檔案型別。動態連結器在執行時在幾個目錄中搜索共享物件,包括 /lib、/usr 和 LD_LIBRARY_PATH 環境變數中列出的目錄。瞭解共享物件檔名的工作原理對於高效地開發和執行 Linux 程式至關重要。

更新於: 2023-03-24

2K+ 閱讀量

開啟你的職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.