Fedora 的 DNF 存储库中 g++ 和 gcc-c++ 之间的链接是什么?

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++而不是其真实名称来安装?

答案1

当您运行时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

相关内容