![为什么Linux默认有C编译器?](https://linux22.com/image/33427/%E4%B8%BA%E4%BB%80%E4%B9%88Linux%E9%BB%98%E8%AE%A4%E6%9C%89C%E7%BC%96%E8%AF%91%E5%99%A8%EF%BC%9F.png)
为什么Linux发行版预先安装了gcc?是因为linux中的大部分应用程序都是用C编写的吗?
如果删除gcc目录会发生什么?
答案1
为什么Linux发行版预先安装了gcc?
ALinux 发行版相当模糊。有些人安装它,大多数人提出安装它(即使您在安装过程中选择默认值也可能)。然而,并非所有发行版都会安装它,您通常可以选择。
是因为Linux中的大部分应用程序都是用C编写的吗?
否。C 编译器(任何 C 编译器,海湾合作委员会这只是一个例子,也可能是铿锵/lvm,或其他)非常方便。不仅可以在 Linux 系统上使用,还可以在 BSD 或 Windows 安装上使用。
如果删除gcc目录会发生什么?
假设它们没有安装依赖于 GCC 任何部分(或其一部分,例如预处理器)的程序,那么一切都会继续正常工作。您只是无法使用刚刚删除的 GCC 版本编译任何新的 C 程序。如果它是最后一个 C 编译器(您可以安装多个编译器),那么如果您稍后编译任何 C 程序,则需要使用二进制包重新安装它。
请注意,与如果删除gcc目录会发生什么?我假设您会使用正确的包管理器删除它。在任何操作系统上随机删除目录都是不安全的事情。
答案2
Linux 上的许多实用程序已使用gcc
.大多数实用程序都会调用运行时共享库,如果您卸载整个包,您仍然需要保留共享库。
/bin/ls
我对使用该命令进行了一些搜索strings -a /bin/ls
,它显示了 libc.so 的使用,它是 Linux 上的标准 C 库。由于 Linux 正式是 Gnu/Linux,我可以假设大多数实用程序都是用 Gnu/C 或 gcc 编译的。如果这样做man libc
,您会注意到它表明大多数 Linux 实用程序都使用 glibc。因此,您需要保留libc
和glibc
以使实用程序正常工作。
答案3
缺乏 ABI 兼容性(尤其是在过去)意味着从源代码构建非常常见。当然,许多需要的不仅仅是 C 编译器来构建......
答案4
在名牌服务器(HP Enterprises Proliant、Fujitsu Primergy 等)上,供应商特定的硬件监控驱动程序通常采用包含一些基本内核接口组件的源代码的形式。驱动程序包通常还包括针对硬件供应商在发布驱动程序包时已知的任何受支持内核版本的预编译驱动程序。
这样,每当 Linux 发行版发布内核安全更新时,都可以重新编译硬件监控模块以匹配更新的内核,而无需等待硬件供应商测试并发布新软件包以匹配更新的内核。
通常监视驱动程序包括一些自动化脚本,当系统第一次使用新的内核版本启动时,它们会自动重新编译适当的模块。当然,只有在系统上安装了编译器和必要的内核开发/头包时,这才会成功。
如果不这样做,有时安装关键的安全升级可能会花费您大量的基本硬件监控信息:系统 PSU 的状态、温度、风扇以及现代服务器上通常的功耗。
在数据中心中,此类监控可以区分“哦,冗余风扇/PSU 坏了,我将派数据中心人员在明天办公时间对其进行热插拔”和“服务器失去了太多风扇,开始过热并自行关闭,现在 SLA 被破坏,客户很不满意 - 服务器需要在天黑 30 点尽快修复或更换。” (是的,不一切是基于云的,甚至是虚拟化的。)