C语言 | 为什么在Linux下能编译成功,而Windows下编译不过?

1024G 嵌入式资源大放送!包括但不限于C/C++、单片机、Linux等。关注微信公众号【嵌入式大杂烩】,回复1024,即可免费获取!

前言

前两天有群友在群里问了如下问题:

大概就是用C语言写了一个socket程序,在Linux下使用gcc编译没问题,而在Windows下使用gcc(装了MinGW,编译环境已经装好)编译会提示没有找到socket相关的头文件。

为什么会出现这样的问题?本篇笔记我们来简单分析一下。

头文件从哪来?

在进行分析之前,我们需要思考一个问题:我们的C编程相关的头文件从哪来?

Windows系统:

对于Windows系统,其本身是不带有C语言的一些库及其头文件。我们要进行C语言编程,必须要安装一些开发包(IDE或者MinGW、Cygwin等)。

而我们C编程需要的头文件就在这些开发包中。比如:

MinGW中:

Dev-C++中:

keil中:

我们单片机开发中,有时候也会用到一些标准库,比如keil中:

关于MinGW、Cygwin的内容可看历史文章:

Cygwin的介绍及使用

MinGW的介绍及使用

Linux系统:

对于Linux系统,C语言的库及其头文件都是属于系统中的一部分,只要安装了编译工具就可以就行C程序的开发。其相关的头文件在/usr/include中:

Windows、Linux下C编程?

首先,我们准备一个demo.c代码:

#include <stdio.h>

int main(void)
{
 printf("hello world\n");
 return 0;
}

在Windows下使用gcc进行编译(编译命令:gcc -v demo.c),加-v参数可以看到编译过程的头文件搜索的一些路径信息及其它信息:

这几个路径就是我们编译demo.c时需要搜索头文件的路径,即从这几个路径中查找stdio.h头文件,该头文件所在的路径为:

这个路径是一个很重要的路径,我们C编程使用的一些标准库头文件都放在这个目录下。C语言的标准库包含哪些头文件?可以到这个网站查看:

https://en.cppreference.com/w/c/header

可以看到,这个C:\MinGW\include路径中不仅包含有着一些标准库头文件,还包含很多其它的头文件。这些头文件就是与Windows 系统相关的一些头文件,比如:

类似这些头文件是为了开发专门的Windows 程序专用的,比如Windows API编程

编译运行:

这个程序用到了windows.h头文件,这是我们Windows下C编程特有的头文件,与Windows系统密切相关。这样的代码在Linux下使用gcc编译是编译不通过的。

这里需要特别提醒的是:上面列举的Windows API编程程序是为了说明才举例出来的,Windows API编程虽说也可以编写一些界面程序,但基本上已经被淘汰了,所以不用花时间去学。

下面看一下Linux下gcc编译的一些情况:

/usr/include路径:

可以看到这里放着一些标准库头文件及其它头文件。而socket编程相关的头文件在/usr/include/sys中:

从上面的举例说明中可以很清楚的知道,对于socket编程,Windows、Linux下socket编程也有点不太一样,具体如下:

所以,那位群友把Linux下写的socket程序拷贝到Windows下编译则自然编译出错,即找不到相应头文件。

综上,我们可以在Windows下基于C语言开发一些与Windows密切相关的程序;我们也可以在Linux下基于C语言开发一些与Linux密切相关的程序。

以上就是本次的分享,如有错误,欢迎指出!谢谢

 

猜你喜欢

Linux下socket编程实例

Windows下socket编程实例

Linux下动态链接与静态链接

Windows下动态链接与静态链接

C语言、嵌入式中几个非常实用的宏技巧

C语言、嵌入式应用:TCP通信实例分析

C语言、嵌入式重点知识:回调函数

C语言、嵌入式位操作精华技巧大汇总

1024G 嵌入式资源大放送!包括但不限于C/C++、单片机、Linux等。关注微信公众号【嵌入式大杂烩】,回复1024,即可免费获取!

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

嵌入式大杂烩

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

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

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

打赏作者

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

抵扣说明:

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

余额充值