Centos

為什麼 .so 包由 devel 包提供?

  • January 22, 2016

我在 RPM 打包中看到了一個有趣的模式。主庫包將包含共享庫本身:

/usr/lib64/libavcodec.so.54

-devel 包將提供標頭和符號連結:

/usr/include/libavcodec/libavcodec.h
/usr/lib64/libavcodec.so -> /usr/lib64/libavcodec.so.54

為什麼 libavcodec.so 符號連結由 devel 包提供,而不只是包含在共享庫包中?符號連結與開發人員想要的東西有什麼關係?標頭是有道理的,但為什麼要使用指向共享對象的符號連結呢?

發行版中的軟體始終以機械方式連結,並希望找到 find libavcodec.so.54,因此任何預建構的軟體包都不需要未版本化的名稱。

但是,如果您自己建構軟體,則通常使用-lavcodec或類似的,這會發現libavcodec.so未版本化。同樣,建構腳本可能期望這些名稱存在。

分發包不需要未版本化的名稱,因此預設情況下不包含它們,但因為它們在建構其他軟體時很有用,它們包含在-devel包中。其他發行版進行了不同的描述,並將.so連結包含在主包中;兩者都是合理的選擇。

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