Linux
為什麼這個 SO(共享對象)以 .3gf 結尾?
在 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 不再擁有它們。