Linux

為什麼這個 SO(共享對象)以 .3gf 結尾?

  • May 11, 2021

在 ubuntu trusty tahr 上,當我libblas3從儲存庫安裝時,它會在/usr/lib/libblas.so.3gf. 在焦點窩下,它的行為不同並安裝在/usr/lib/x86_64-linux-gnu/libblas.so.3. 我假設後者按照這個答案遵循 libtool 版本控制。但是我找不到關於這個舊.3gf文件副檔名的任何資訊。它位於 和libblas.so.3旁邊libblas.so。代表什麼.3gf

通常,共享庫帶有一個文件和兩個符號連結:

  • 該文件libfoo.so.1.2.3(後面有多個數字.so)以庫的版本命名為軟體項目。它不直接使用,僅通過兩個符號連結之一。
  • 符號連結libfoo.so.V(後面有一個數字.so)以“soversion”(共享對象版本)命名。每當庫的ABI發生不兼容的更改時,soversion 都會更改。程序連結到庫的特定版本。如果您有針對不同版本的庫建構的程序,您可以安裝不同版本的庫,使用不同的版本。
  • 符號libfoo.so(後面沒有數字.so)是您安裝了開發文件(標頭檔、靜態庫)的版本。如果你編譯一個程序,它將與任何soversionlibfoo.so指向的連結(最好與標頭檔兼容)。

文件名中的 soversion 通常是一個整數,每次發生不兼容的更改時都會遞增,但並非必須如此。

一段時間以來,Debian 維護了兩個版本的 BLAS 庫,它們的 API 不兼容:libblas3上游項目的 API,以及libblas3gf對 C 介面的一些小改動”。為連結到上游 API 的程序安裝的軟體包和libblas3為連結到 Debian API 的程序安裝的軟體包。libblas.so.3``libblas3gf``libblas.so.3gf

2011 年,Debian 停止維護該庫的單獨版本。(據我了解,Debian 的更改或類似的更改已在上游合併,因此未來版本libblas3具有 3gf 版本所具有的所有內容。)因此 3gf 版本已過時,但該.so文件仍可用於執行現有編譯程式。移除向後兼容別名花了幾年時間。Ubuntu 18.04 仍然擁有它們,但 Ubuntu 20.04 不再擁有它們。

引用自:https://unix.stackexchange.com/questions/649255