零、问题

在Ubuntu20.04.6中使用GCC编译一个HelloWorld代码时遇到如下问题:

首先确认了,自己单词没有拼写错。

然后再检查GCC的版本,确实没问题:

我用的是Ubuntu20.04.6的版本。

壹、解决

没有标准的头文件需要安装build-essential来解决。

1、使用 apt-get 安装 build-essential

需要安装build-essential
执行以下命令:

sudo apt-get install build-essential

报错,版本不兼容:

minuhy@yuvm:~/code$ sudo apt-get install build-essential正在读取软件包列表... 完成正在分析软件包的依赖关系树 正在读取状态信息... 完成 有一些软件包无法被安装。如果您用的是 unstable 发行版,这也许是因为系统无法达到您要求的状态造成的。该版本中可能会有一些您需要的软件包尚未被创建或是它们已被从新到(Incoming)目录移出。下列信息可能会对解决问题有所帮助:下列软件包有未满足的依赖关系: build-essential : 依赖: libc6-dev 但是它将不会被安装 或 libc-dev 依赖: g++ (>= 4:9.2) 但是它将不会被安装E: 无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依赖关系。

2、使用 aptitude 安装 build-essential

安装 aptitude :

sudo apt-get install aptitude

使用 aptitude 安装 build-essential:

sudo aptitude install build-essential

aptitude 会提出很多种方案的,默认的方案同样是安装不了的,我们需要在它第一次询问的时候回复n查看下一个方案,然后它会提示给一些软件降级,回复y同意,然后就安装上build-essential了。

我的操作过程如下:

root@yuvm:/home/minuhy/code# aptitude install build-essential下列“新”软件包将被安装。 build-essential g++{a} g++-9{a} libc-dev-bin{a} libc6-dev{ab} libcrypt-dev{a} libstdc++-9-dev{a} linux-libc-dev{a} 0 个软件包被升级,新安装 8 个,0 个将被删除, 同时 0 个将不升级。需要获取 14.0 MB 的存档。解包后将要使用 73.4 MB。下列软件包存在未满足的依赖关系: libc6-dev : 依赖: libc6 (= 2.31-0ubuntu9.7) 但是 2.31-0ubuntu9.9 已安装下列动作将解决这些依赖关系: 保持 下列软件包于其当前版本:1) build-essential [未安装的] 2) g++ [未安装的] 3) g++-9 [未安装的] 4) libc6-dev [未安装的] 5) libstdc++-9-dev [未安装的] 是否接受该解决方案?[Y/n/q/" />] n下列动作将解决这些依赖关系: 降级 下列软件包:1) libc6 [2.31-0ubuntu9.9 (now) -> 2.31-0ubuntu9.7 (focal-security)]2) libc6-dbg [2.31-0ubuntu9.9 (now) -> 2.31-0ubuntu9.7 (focal-security)]是否接受该解决方案?[Y/n/q/?] y下列软件包将被“降级”:libc6 libc6-dbg 下列“新”软件包将被安装。build-essential g++{a} g++-9{a} libc-dev-bin{a} libc6-dev{a} libcrypt-dev{a} libstdc++-9-dev{a} linux-libc-dev{a} 0 个软件包被升级,新安装 8 个,2 个被降级,0 个将被删除, 同时 0 个将不升级。需要获取 27.2 MB 的存档。解包后将要使用 120 MB。您要继续吗?[Y/n/?] y读取: 1 http://mirrors.aliyun.com/ubuntu focal-security/main amd64 libc6-dbg amd64 2.31-0ubuntu9.7 [10.5 MB]读取: 2 http://mirrors.aliyun.com/ubuntu focal-security/main amd64 libc6 amd64 2.31-0ubuntu9.7 [2,714 kB] 读取: 3 http://mirrors.aliyun.com/ubuntu focal-security/main amd64 libc-dev-bin amd64 2.31-0ubuntu9.7 [71.6 kB] 读取: 4 http://mirrors.aliyun.com/ubuntu focal-security/main amd64 linux-libc-dev amd64 5.4.0-153.170 [1,116 kB]读取: 5 http://mirrors.aliyun.com/ubuntu focal/main amd64 libcrypt-dev amd64 1:4.4.10-10ubuntu4 [104 kB]读取: 6 http://mirrors.aliyun.com/ubuntu focal-security/main amd64 libc6-dev amd64 2.31-0ubuntu9.7 [2,518 kB] 读取: 7 http://mirrors.aliyun.com/ubuntu focal-security/main amd64 libstdc++-9-dev amd64 9.4.0-1ubuntu1~20.04.1 [1,722 kB]读取: 8 http://mirrors.aliyun.com/ubuntu focal-security/main amd64 g++-9 amd64 9.4.0-1ubuntu1~20.04.1 [8,420 kB]读取: 9 http://mirrors.aliyun.com/ubuntu focal/main amd64 g++ amd64 4:9.3.0-1ubuntu2 [1,604 B]读取: 10 http://mirrors.aliyun.com/ubuntu focal/main amd64 build-essential amd64 12.8ubuntu1 [4,624 B]已下载 27.2 MB,耗时 24(1,126 kB/s) 正在预设定软件包 ...dpkg: 警告: 即将把 libc6-dbg:amd64 从 2.31-0ubuntu9.9 降级到 2.31-0ubuntu9.7(正在读取数据库 ... 系统当前共安装有 187061 个文件和目录。)准备解压 .../libc6-dbg_2.31-0ubuntu9.7_amd64.deb...正在解压 libc6-dbg:amd64 (2.31-0ubuntu9.7) 并覆盖 (2.31-0ubuntu9.9) ...dpkg: 警告: 即将把 libc6:amd64 从 2.31-0ubuntu9.9 降级到 2.31-0ubuntu9.7准备解压 .../libc6_2.31-0ubuntu9.7_amd64.deb...正在解压 libc6:amd64 (2.31-0ubuntu9.7) 并覆盖 (2.31-0ubuntu9.9) ...正在设置 libc6:amd64 (2.31-0ubuntu9.7) ...正在选中未选择的软件包 libc-dev-bin。(正在读取数据库 ... 系统当前共安装有 186904 个文件和目录。)准备解压 .../0-libc-dev-bin_2.31-0ubuntu9.7_amd64.deb...正在解压 libc-dev-bin (2.31-0ubuntu9.7) ...正在选中未选择的软件包 linux-libc-dev:amd64。准备解压 .../1-linux-libc-dev_5.4.0-153.170_amd64.deb...正在解压 linux-libc-dev:amd64 (5.4.0-153.170) ...正在选中未选择的软件包 libcrypt-dev:amd64。准备解压 .../2-libcrypt-dev_1%3a4.4.10-10ubuntu4_amd64.deb...正在解压 libcrypt-dev:amd64 (1:4.4.10-10ubuntu4) ...正在选中未选择的软件包 libc6-dev:amd64。准备解压 .../3-libc6-dev_2.31-0ubuntu9.7_amd64.deb...正在解压 libc6-dev:amd64 (2.31-0ubuntu9.7) ...正在选中未选择的软件包 libstdc++-9-dev:amd64。准备解压 .../4-libstdc++-9-dev_9.4.0-1ubuntu1~20.04.1_amd64.deb...正在解压 libstdc++-9-dev:amd64 (9.4.0-1ubuntu1~20.04.1) ...正在选中未选择的软件包 g++-9。准备解压 .../5-g++-9_9.4.0-1ubuntu1~20.04.1_amd64.deb...正在解压 g++-9 (9.4.0-1ubuntu1~20.04.1) ...正在选中未选择的软件包 g++。准备解压 .../6-g++_4%3a9.3.0-1ubuntu2_amd64.deb...正在解压 g++ (4:9.3.0-1ubuntu2) ...正在选中未选择的软件包 build-essential。准备解压 .../7-build-essential_12.8ubuntu1_amd64.deb...正在解压 build-essential (12.8ubuntu1) ...正在设置 linux-libc-dev:amd64 (5.4.0-153.170) ...正在设置 libc6-dbg:amd64 (2.31-0ubuntu9.7) ...正在设置 libcrypt-dev:amd64 (1:4.4.10-10ubuntu4) ...正在设置 libc-dev-bin (2.31-0ubuntu9.7) ...正在设置 libc6-dev:amd64 (2.31-0ubuntu9.7) ...正在设置 libstdc++-9-dev:amd64 (9.4.0-1ubuntu1~20.04.1) ...正在设置 g++-9 (9.4.0-1ubuntu1~20.04.1) ...正在设置 g++ (4:9.3.0-1ubuntu2) ...update-alternatives: 使用 /usr/bin/g++ 来在自动模式中提供 /usr/bin/c++ (c++)正在设置 build-essential (12.8ubuntu1) ...正在处理用于 man-db (2.9.1-1) 的触发器 ...正在处理用于 libc-bin (2.31-0ubuntu9.9) 的触发器 ... root@yuvm:/home/minuhy/code# aptitude install build-essentialbuild-essential 的 (12.8ubuntu1) 版本已经按要求安装了build-essential 的 (12.8ubuntu1) 版本已经按要求安装了将不会安装,升级或者删除任何软件包。0 个软件包被升级,新安装 0 个,0 个将被删除, 同时 0 个将不升级。需要获取 0 B 的存档。解包后将要使用 0 B。

这样就安装成功了。

贰、结果

再次尝试编译C文件:

成功!

叁、参考文献

  1. gcc编译时报错 fatal error: stdio.h: 没有那个文件 解决方法
  2. 提示“无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依赖关系“的解决方案
  3. Linux学习笔记(二)build-essential的安装
  4. Ubuntu 镜像
  5. ubuntu下如何安装gcc
  6. 致命错误: stdio.h:没有那个文件或目录