Fedora
Fedora 的 DNF 儲存庫中的 g++ 和 gcc-c++ 之間的聯繫是什麼?
在 Fedora 35 上:
# dnf install g++ Last metadata expiration check: 0:07:14 ago on Fri May 6 09:44:09 2022. Package gcc-c++-11.3.1-2.fc35.x86_64 is already installed. Dependencies resolved. Nothing to do. Complete!
# dnf info g++ Last metadata expiration check: 0:08:26 ago on Fri May 6 09:44:09 2022. Error: No matching Packages to list
我知道
gcc-c++
是一個包,如果我想編譯 C++,我應該安裝它。
g++
如果它不是一個包,為什麼安裝(甚至刪除!)工作?額外問題:如何
gcc-c++
僅通過引用g++
而不是其真實名稱來檢查是否已安裝?
當你執行時
dnf install <something>
,它會首先尋找一個包名<something>
,然後它會尋找一個提供<something>
的包。“provides”值實際上是一個虛擬包名稱(使用Provides:
RPM 規範文件中的關鍵字設置)。我們可以通過執行查看包提供的內容:
g++
dnf repoquery --whatprovides g++
其中(在 Fedora 35 上)產生:
gcc-c++-0:11.2.1-1.fc35.i686 gcc-c++-0:11.2.1-1.fc35.x86_64 gcc-c++-0:11.3.1-2.fc35.x86_64
該
dnf repoquery
命令查詢您的儲存庫配置。您還可以使用 詢問有關本地安裝的軟體包的相同問題rpm -q --whatprovides
,因此請執行以下操作:獎勵問題:如何僅通過引用 g++ 而不是其真實名稱來檢查 gcc-c++ 是否已安裝?
趕緊跑:
rpm -q --whatprovides g++
返回碼將告訴您是否有任何已安裝的軟體包提供
g++
.此功能通常用於指定連結到特定功能而不是特定包的包依賴項。例如,如果您有一些需要網路伺服器的東西,而不是讓它依賴於特定的包(例如,
httpd
或nginx
),您可以在您的規範文件中編寫:Requires: webserver
然後,如果安裝了這些軟體包中的任何一個,則將滿足依賴項:
$ dnf repoquery --whatprovides webserver caddy-0:2.3.0-2.fc35.x86_64 httpd-0:2.4.51-2.fc35.x86_64 httpd-0:2.4.53-1.fc35.x86_64 lighttpd-0:1.4.59-3.fc35.x86_64 lighttpd-0:1.4.64-1.fc35.x86_64 nginx-1:1.20.1-6.fc35.x86_64 nginx-1:1.20.2-1.fc35.x86_64