windows下的gcc使用

2023-11-09

缘起

在windows有很多集成开发环境(vs系列,code::blocks等等)可以用,为什么要使用gcc在dos下面编译一个c程序呢?因为博主最近要看一下uC/OS-II方面的东西,然后教材使用的是:任哲的《嵌入式实时操作系统μCOS-II原理及应用》,在这本书里面介绍将c语言程序一步步编译运行的时候使用的是Borland C++3.1精简版,这个编译器在Turbo C的时代是非常受欢迎的,但是在2009年的时候Borland公司都已经被Micro Focus收购了。所以我就想直接用gcc,不用Borland C++了。

正文

安装gcc

首先安装gcc编译器,这个网上都有教程,如果之前有用过类似code::blocks的集成开发环境的话,gcc编译器都安装好了。博主之前是安装过code::blocks的,所以第一步省了。给个图
在这里插入图片描述
MinGW这个目录就是gcc移植到windows的结果。因为gcc只是个编译器嘛,如果要在windows这个平台下使用的话肯定是要加点东西的。MinGW本身也存在多个分支,可以在Windows、Linux中编译能在Windows中执行的二进制代码。

记得先给这个bin目录加个PATH环境变量

使用gcc来编译c语言程序

使用gcc可以直接编译一个c语言程序,也可以一步步来编译。如下:

直接编译生成.exe文件

在桌面上创建一个main.c文件

# include <stdio.h>
int main (void)
{
	printf("hello world!!!");
	return 0;
}

打开cmd,进入main.c所在目录

C:\Users\Administrator\Desktop>
  • 生成main.exe:gcc -o main.exe main.c
  • 执行main.exe:main
C:\Users\Administrator\Desktop>gcc main.o -o main

C:\Users\Administrator\Desktop>main
hello world!!!

生成的文件如下图:
在这里插入图片描述

在cmd里面使用gcc编译器编译c文件流程

进入main.c文件所在目录

  1. 预编译处理,生成main.i文件:gcc -E main.c -o main.i
  2. 编译处理,生成main.s文件:gcc -S main.i -o main.s
  3. 汇编处理,生成main.o文件:gcc -c main.i -o main.o
  4. 链接处理,生成main.exe文件:gcc main.o -o main
  5. 执行main.exe:main
C:\Users\Administrator\Desktop>gcc -E main.c -o main.i

C:\Users\Administrator\Desktop>gcc -S main.i -o main.s

C:\Users\Administrator\Desktop>gcc -c main.i -o main.o

C:\Users\Administrator\Desktop>gcc main.o -o main

C:\Users\Administrator\Desktop>main
hello world!!!

生成的文件如下图所示:
在这里插入图片描述

利用gcc编译多个c语言源文件

第一步建立文件

在桌面建立一个文件夹(main),然后在该文件夹里面建立6个文件,分别为pa.c、pa.h、pb.c、pb.h、pc.c、pc.h、test.c。基本思路是在test.c文件里面引用pa.c、pb.c、pc.c文件里的内容。各个文件的代码如下所示:

// pa.h
# ifndef PA_H
# define PA_H
void A_print();
# endif
// pa.c
# include <stdio.h>
# include "pa.h"

void A_print()
{
	printf("AAAAAAAAA\n");
}
// pb.h
# ifndef PB_H
# define PB_H
void B_print();
# endif
// pb.c
# include <stdio.h>
# include "pb.h"

void B_print()
{
	printf("BBBBBBBB\n");
}
// pc.h
# ifndef PC_H
# define PC_H
void C_print();
# endif
// pc.c
# include <stdio.h>
# include "pc.h"

void C_print()
{
	printf("CCCCCCCC\n");
}
// test.c
# include "pa.h"
# include "pb.h"
# include "pc.h"
int main (void)
{
	int i = 0;
	for(i; i < 10; i++)
	{
		A_print();
		B_print();
		C_print();
	}
	return 0;
}
编译文件

利用上面说过的gcc命令将pa.c、pb.c、pc.c、test.c三个文件编译形成.o文件。形成之后的main目录如下图所示
在这里插入图片描述

链接 & 运行

下面将pa.o、pb.o、pc.o、test.o文件链接生成test.exe

C:\Users\Administrator\Desktop\main>gcc pa.o pb.o pc.o test.o -o test

然后运行,结果和意料之中的一样。
在这里插入图片描述

gcc基本参数

  • -o:指定输出文件名
  • -E:只进行预处理,不编译
  • -S:只编译,不汇编
  • -c:只编译、汇编,不链接
  • -g:包含调试信息
  • -I:指定include包含的搜索目录
  • -o:输出成指定文件名

参考文献

https://zhidao.baidu.com/question/380094783.html
Microsoft Visual C++ 和 Borland C++ Builder 之比较:
gcc编译C语言程序的执行过程
GCC 编译详解

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

windows下的gcc使用 的相关文章

  • Qt样式表 基础篇(2)

    这部分的内容直接来自Qt官方文档 原滋原味 不做过多介绍和翻译 因为 实在是非常完备了 Qt 帮助文档 目录 Qt Style Sheets Reference 样式表相关资料 List of Stylable Widgets 可设置样式的

随机推荐

  • 输出越界问题 和 long long 的两数加法问题

    做hdu http acm hdu edu cn showproblem php pid 2047 阿牛的牛肉串有感 注意方面一 测试 边界的数值 考虑会不会越界 注意方面二 在使用时注意这一点 如下文 直接相加 和赋值后相加不一样 pay
  • js前置递增和后置递增

    1 单独使用时 效果一样 与其他代码连用时 执行结果不同 2 前置 先自加 后运算 先己后人 后置 先原值运算 后自加 先人后己 3 开发时 大多使用后置递增 减 且代码独占一行 例如 num 或者num
  • Idea中启动一个工程多个实例

    我们有时候经常一个工程启动多个实例 分别占用不同的端口 转载记录如下 step 1 在IDEA上点击Application右边的下三角 弹出选项后 点击Edit Configuration step 2 打开配置后 将默认的Single i
  • ERP制造模块操作与设计--开源软件诞生30

    赤龙ERP制造模块讲解 第30篇 用日志记录 开源软件 的诞生 进入地址 点亮星星 祈盼着一个鼓励 博主开源地址 码云 https gitee com redragon redragon erp GitHub https github co
  • java 代码scope注解_【Spring注解驱动开发】使用@Scope注解设置组件的作用域

    本文内容概览 Scope注解概述 单实例bean作用域 多实例bean作用域 单实例bean作用域如何创建对象 多实例bean作用域如何创建对象 单实例bean注意的事项 多实例bean注意的事项 自定义Scope的实现 Scope注解概述
  • MySQL安装与截图(详解版)

    一 在MySQL官网下载应用程序 二 安装MySQL 三 配置MySQL 四 将bin路径复制 配置MySQL的环境变量 五 登录MySQL mysql u root p 下载MySQL 进入官网MySQL 点击DOWNLOADS 进入DO
  • ElasticSearch bulk批量插入数据

    环境 使用RestHighLevelClient进行bulk操作 代码如下 es 批量存数据的方法 1 创建es clent 2 创建bulk请求体 3 向bulk请求体中添加多个数据 4 发起rest请求 5 关闭client throw
  • el-table在多选模式下,使用分页,回显出问题。

    问题描述 el table在多选模式下 使用分页功能时 回显选中状态时 每次点击分页会默认选中最后一条数据 或者回显混乱 这个问题可以通过设置el table的row key属性来解决 你可以将getRowKeys方法设置为row key属
  • presto函数和hive函数的使用

    最近做大数据分析工作比较多 主要与presto和hive查询引擎打交道 presto在实时计算上真的很快 个人感觉比hive要快10倍吧 但是hive在面向海量数据的分析计算上也是很牛逼的 这里不得不记录下两者在使用上的一些区别 粘贴一段二
  • 四、Vite 模式 && 环境变量 && env

    文章目录 参考 环境变量 env 文件 环境加载优先级 只有以 VITE 为前缀的变量才会暴露给经过 vite 处理的代码 模式 vite dev 开发模式 vite build 生产模式 参考 Vite官网 环境变量和模式 环境变量 Vi
  • 史上最强的高质量资源搜索网站,不知道亏了几个亿!

    只用百度找资源 难怪总是找不到想要的资源 快悄悄把这 8个资源网站收藏起来 再也不怕找不到资源啦 1 鸵鸟搜索 专业最好用的资源搜索与推荐平台 包含电影电视剧动漫推荐资源 美剧网盘资源 电影网盘资源 动漫网盘资源 bt种子资源 音乐小说资源
  • 移动平台质量跟踪系统对比-crashlytics、网易云捕、友盟、bugly

    大家在开发移动APP时 会涉及到很多非产品本身的功能 比如数据统计分析 APP 质量跟踪 APP加密 漏洞扫描分析等等 这些功能目前都有很多第三方的SDK及平台可以使用 这些平台各有特点 很多时候开发者是凭借自己的慧眼来选择 也有很多是通过
  • Range-Straightening theorem illustration

    Theorem Illustration
  • linux如何查看软件权限,Linux下使用RPM查看安装的软件和权限操作

    RPM 的介绍和应用 1 查看是否安装了gcc 命令 rpm ql gcc rpm qa grep gcc 参数 q 询问 a 查询全部 l 显示列表 2 权限 安装和删除只有root和有安装权限的用户才可以进行 查询是每个用户都可以进行操
  • zkServer.cmd点击无反应,报错:JAVA_HOME is not set

    window版本中的zk安装过程中遇到一些问题 zkServer cmd点击无反应 现象 window本地准备zk启动的时候 点击zkServer cmd 不弹启动日志的窗口 无反应 以下是排查过程 在zk的安装目录下 我的是D apach
  • Faster-RCNN遇到的问题

    编译过程挺顺利的 完全参照之前编译的caffe的makefile进行就好 运行 experiments scripts faster rcnn alt opt sh 0 VGG16 pascal voc 遇到的问题做个小汇总 1 pytho
  • MyBatis学习(一):一个简单的演示

    MyBatis是支持普通SQL查询 存储过程和高级映射的优秀持久层框架 MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索 他是使用简单的XML或是注解用于配置和原始映射 将接口和java的对象映射为数据库中的记录
  • 数据结构-线性表

    线性表 线性表是典型线性数据结构 线性表是由n n 0 个数据元素组成的一个有限序列 线性表中数据元素的个数n称为线性表的长度 当n 0时 称为空表 非空线性表满足线性结构的三个特性 线性表的数据元素可以是由一个数据项组成的简单数据元素 也
  • pmc是什么职位?

    答案一 PMC代表Product Material Control的缩写形式 意思为生产及物料控制 通常它分为两个部分 PC 生产控制或生产管制 台 日资公司俗称生管 主要职能是生产的计划与生产的进度控制 MC 物料控制 俗称物控 主要职能
  • windows下的gcc使用

    文章目录 缘起 正文 安装gcc 使用gcc来编译c语言程序 直接编译生成 exe文件 在cmd里面使用gcc编译器编译c文件流程 利用gcc编译多个c语言源文件 第一步建立文件 编译文件 链接 运行 gcc基本参数 参考文献 缘起 在wi