在 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++
其中(在 Fedora 35 上)产生:
该
dnf repoquery
命令查询您的存储库配置。您还可以使用 询问有关本地安装的软件包的相同问题rpm -q --whatprovides
,因此请执行以下操作:赶紧跑:
返回码将告诉您是否有任何已安装的软件包提供
g++
.此功能通常用于指定链接到特定功能而不是特定包的包依赖项。例如,如果您有一些需要网络服务器的东西,而不是让它依赖于特定的包(例如,
httpd
或nginx
),您可以在您的规范文件中编写:然后,如果安装了这些软件包中的任何一个,则将满足依赖项: