Fedora

Fedora 的 DNF 儲存庫中的 g++ 和 gcc-c++ 之間的聯繫是什麼?

  • May 6, 2022

在 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++.


此功能通常用於指定連結到特定功能而不是特定包的包依賴項。例如,如果您有一些需要網路伺服器的東西,而不是讓它依賴於特定的包(例如,httpdnginx),您可以在您的規範文件中編寫:

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

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