【C语言】gcc编译时报错 fatal error: stdio.h: 没有那个文件或目录

零、问题

在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-essential
build-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:没有那个文件或目录
  • 5
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
### 回答1: 这个错误提示表明您的程序在编译或运行无法找到 stdio.h 头文件,这是一个标准 C 语言库文件,其中包含了输入输出相关的函数声明和定义。 可能的原因是您的编译器或开发环境没有正确设置或安装,或者该文件被错误地删除或移动。 您可以尝试重新安装您的编译器或开发环境,并确保 stdio.h 文件在正确的位置,通常是在系统的 C 标准库目录中。如果您使用的是 Linux 或类 Unix 操作系统,则可以尝试安装相应的开发工具包,例如 gcc、make 等。如果您使用的是 Windows 操作系统,则可以尝试安装 Visual Studio 或 MinGW 等开发工具。 另外,您也可以尝试手动复制 stdio.h 文件到您的项目目录中,或者在程序中使用相对或绝对路径来引用该文件。 ### 回答2: 这个错误提示表示在编译程序编译器找不到 stdio.h 头文件stdio.h 是 C 语言标准库中一个重要的头文件,它包含了对输入输出函数的定义,如果缺少它,就会导致程序无法编译通过。 造成这个错误的原因可能有以下几种: 1. 系统或环境没有安装必要的开发包。在 Linux 系统中,通常需要安装 gcc、g++、make 等开发工具,以及对应的各种库文件。如果缺少了这些支持包,就会导致 stdio.h 头文件无法找到。 2. 头文件路径设置错误。在编译,需要告诉编译器到哪里去寻找需要的头文件,如果这个路径设置有误,就会产生类似的错误。可以使用 -I 参数指定头文件搜索路径,比如 -I/usr/include。 3. 源代码文件名扩展名错误。如果程序源代码文件扩展名不是 .c 或者 .cpp,编译器就可能不会自动识别它们是 C 语言或 C++ 语言文件,从而无法自动加载对应的标准库头文件,也会导致 stdio.h 未找到的错误。 解决这个错误的方法,一般需要检查上述几种情况并进行逐一排查。例如,可以先检查系统或环境是否安装了必要的开发包,如果没有,就要先安装它们。如果安装了,但仍然出现这个错误,就要检查头文件路径和扩展名。可以使用一些浏览器开发工具或编辑器,如 VSCode、gcc、make 等,帮助分析和排查这个错误,并逐步调整和修正代码。 ### 回答3: 在编译C语言程序,我们会经常遇到各种各样的错误提示,其中之一就是"fatal error: stdio.h: 没有那个文件目录"。 这个错误提示的含义是,编译器在编译过程中无法找到头文件"stdio.h"。"stdio.h"是C语言中的一个标准头文件,包含了输入输出有关的函数和宏定义。而C语言程序中大量使用了stdio.h头文件中的函数和宏定义,如果缺少这个头文件,那么就无法正常编译、链接和执行程序。 那么,为什么编译器会提示"没有那个文件目录"的错误呢?这通常是因为编译没有找到所需要的头文件路径。在编译程序编译器需要到指定的目录中搜索所需要的头文件,而当它找不到的候就会发出提示。 那么,我们应该如何解决这个问题呢?首先,需要检查所使用的编译器和所需要的头文件是否匹配。其次,需要检查头文件所在的目录是否正确,并且是否添加到了编译器的搜索路径中。如果头文件所在的目录不正确,可以通过"-I"选项手动指定头文件的路径。如果编译器在搜索路径中找不到头文件,可以将头文件所在的路径添加到编译器的搜索路径中,例如使用"-I"选项指定头文件所在的路径,或在程序中使用#include语句指定头文件所在的路径。 总之,遇到"fatal error: stdio.h: 没有那个文件目录"的错误提示,需要仔细检查所需要的头文件是否存在,以及编译器是否能够正确找到所需要的头文件路径,只有这样才能顺利进行C语言程序的编译和执行,达到预期的效果。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

玉米子禾

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值