C语言入门(二)、每日Linux(三)——gcc命令,通过gcc命令熟悉C语言程序实现的过程

使用gcc编译C语言程序

  • C语言程序实现的过程
  • gcc命令
    • 基础用法
    • 常用选项
      • 编译和汇编选项:
      • 优化选项:
      • 调试选项:
      • 链接选项:
      • 警告选项:
    • 实验
      • 对于`-o`选项
  • 通过gcc命令熟悉C语言程序的执行过程
    • 1.预处理
    • 2.编译阶段
    • 3.汇编阶段
    • 4.链接阶段

C语言程序实现的过程

主要分为以下几个阶段:

  1. 预处理阶段
  2. 编译阶段
  3. 汇编阶段
  4. 链接阶段
  5. 生成可执行文件

详情请参考C语言入门(一)——C语言程序的执行过程和构造

gcc命令

GCC的全称为GNU Compiler Collection(GNU是一个项目,旨在创建一个完全免费、开源的类Unix操作系统,Compiler 是编译器,Collection 是集合)。gcc是一套由GNU项目开发的编程语言编译器。它支持多种编程语言,包括C、C++、Fortran、Ada、Objective-C等,当然gcc最常使用的情形是编译C语言程序。

基础用法

gcc [选项] 源文件1 [源文件2 ...] 
gcc [选项] 源文件1 [源文件2 ...] -o 输出文件名

这里的[选项]和[源文件2…]不是必须的。
-o选项是默认要加上的。

常用选项

编译和汇编选项:

-E: 只进行预处理,生成预处理后的代码。
-S: 生成汇编代码而不进行后续的编译和链接。
-c: 只编译不链接,生成目标文件。

优化选项:

-O[level]: 设置优化级别(0 到 3)。
-Os: 优化以减小代码大小。
-Og: 适用于优化调试时的代码。

调试选项:

-g: 生成调试信息。
-ggdb: 生成适用于 GDB 的调试信息。

链接选项:

-l<library>: 链接时指定使用的库。
-L<directory>: 添加库文件搜索路径。
-static: 静态链接生成可执行文件。

警告选项:

-Wall: 启用常见的警告。
-Werror: 将警告视为错误。

实验

对于-o选项

我们以一个最经典的C语言程序为例子,应用gcc对程序进行编译

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

如果没有-o 输出文件这段代码,那么默认会输出名为a.out的可执行文件。
在这里插入图片描述
下面的实验关于-E、-S、-c选项的应用。

通过gcc命令熟悉C语言程序的执行过程

我们如果只想执行代码,使用基础用法中的代码即可,以下主要是为了熟悉C语言的实现过程。

1.预处理

使用-E选项活动.o为后缀的文件
在这里插入图片描述
使用cat查看test.i的内容后,其实包含了很多的宏的定义,函数的声明等等,最后才是main函数

2.编译阶段

使用-S选项活动.s为后缀的汇编程序。
在这里插入图片描述
编译阶把高级的C语言转变为较低级的汇编语言,这里的语言就是汇编语言。

3.汇编阶段

使用-c选项活动.o为后缀的汇编程序。
在这里插入图片描述

因为汇编阶段的程序已经进行了编译,输出的是机器代码,机器代码是二进制代码,如果使用cat进行查看就会出现一堆乱码,所以这里我们使用od命令进行查看。

od -t x1 test.o

4.链接阶段

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/351690.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Rose】用例图活动图绘制

绘制【Rose】用例图、活动图 文章目录 安装Rose后、画图前的准备工作绘制用例图为用例创建活动图描述用况 安装Rose后、画图前的准备工作 打开Rose&#xff0c;选择第一个J2EE就好。 渲染完的样子&#xff1a; 下面就可以开始画图了。✌✌ 绘制用例图 1、点击【Use Case V…

<蓝桥杯软件赛>零基础备赛20周--第18周--动态规划初步

报名明年4月蓝桥杯软件赛的同学们&#xff0c;如果你是大一零基础&#xff0c;目前懵懂中&#xff0c;不知该怎么办&#xff0c;可以看看本博客系列&#xff1a;备赛20周合集 20周的完整安排请点击&#xff1a;20周计划 每周发1个博客&#xff0c;共20周。 在QQ群上交流答疑&am…

2024年【浙江省安全员-C证】考试题库及浙江省安全员-C证模拟考试

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2024年【浙江省安全员-C证】考试题库及浙江省安全员-C证模拟考试&#xff0c;包含浙江省安全员-C证考试题库答案和解析及浙江省安全员-C证模拟考试练习。安全生产模拟考试一点通结合国家浙江省安全员-C证考试最新大纲…

Vite+Electron快速构建一个VUE3桌面应用(一)

一. 简介 首先&#xff0c;介绍下vite和Electron。 Vite是一种新型前端构建工具&#xff0c;能够显著提升前端开发体验。Electron是一个使用 JavaScript、HTML 和 CSS 构建桌面应用程序的框架。 嵌入Chromium和Node.js到二进制的 Electron 允许您保持一个 JavaScript 代码代码…

Java 魔法类 Unsafe 详解

&#x1f345;文末获取联系&#x1f345; &#x1f447;&#x1f3fb; 精彩项目推荐订阅&#x1f447;&#x1f3fb; 不然下次找不到哟 感兴趣的可以先收藏起来&#xff0c;还有大家在毕设选题&#xff0c;项目以及论文编写等相关问题都可以给我留言咨询&#xff0c;希望帮助更…

短视频矩阵系统软件/电脑pc企业版/手机端双开发~~源头

短视频矩阵系统软件开发的属性主要包含以下几个方面&#xff1a; 开发属性&#xff1a; 1. 功能属性&#xff1a;功能是短视频矩阵系统的核心属性&#xff0c;包括短视频的采集、编辑、发布、推广、互动等功能。此外&#xff0c;系统的个性化定制也是考虑的重要因素&#xff0…

商品库存管理系统(C语言)

1 设计目的 让商家能够更方便地管理商品库存。 2 需求分析 用户能够实现对商品的入库、出库、删除、修改和查询等功能。 3 总体设计 商品库存管理系统存在以下模块&#xff0c;商品入库模块、商品出库模块、删除商品模块、修改商品模块、查询商品模块、显示商品模块。 4 详细…

linux中安装tomcat并启动运行web项目

在 Linux 中安装 Tomcat 并启动运行 Web 项目,您可以按照以下步骤进行操作: 1.下载和解压 Tomcat: 打开终端(Terminal)。 使用 wget 命令下载 Tomcat 压缩包。例如: wget https://downloads.apache.org/tomcat/tomcat-<version>/bin/apache-tomcat-<version&g…

ZK鉴权设计以及相关探讨

文章目录 1. zk的鉴权设计2. zk鉴权应用范围3. zk鉴权的常用方法4. 推荐配置5. 参考文档 鉴权&#xff0c;分别由鉴和权组成 鉴&#xff1a; 表示身份认证&#xff0c;认证相关用户是否存在以及相关的用户名和密码是否一致权&#xff1a; 完成身份的鉴后&#xff0c;还需要判断…

嵌入式培训机构四个月实训课程笔记(完整版)-Linux ARM平台编程第六天-Linux文件系统(物联技术666)

链接&#xff1a;https://pan.baidu.com/s/1VUc8cGI7bTtXuGepZZY3Ng?pwd1688 提取码&#xff1a;1688 上午&#xff1a;文件系统介绍 下午&#xff1a;文件系统的制作 教学内容&#xff1a; 在linux中文件分为二种&#xff1a; 根文件和普通文件&#xff1b; Linux以树状…

2024河南省公务员报名确认缴费流程

1、抢考点&#xff01;及时的报名确认以及缴费&#xff01; 2024年1月31日9∶00至2月40日17∶00前进行上传照片、选择考区和网上缴费。需要提醒各位考生的是&#xff0c;各个城市考点容量有限&#xff0c;需要尽早进行确认缴费选考点。每年都有因为报名确认较晚&#xff0c;未能…

云流量回溯在网络管理中的关键应用

云流量回溯是一种在云计算环境下的网络流量分析技术&#xff0c;它能够追踪和还原网络中的流量&#xff0c;为网络管理和安全监控提供了强大的支持。在本文中&#xff0c;我们将探讨云流量回溯的原理&#xff0c;并探讨其在实际网络管理中的关键应用。 1. 云流量回溯概述 云流量…

Docker数据卷挂载(以容器化Mysql为例)

数据卷 数据卷是一个虚拟目录&#xff0c;是容器内目录与****之间映射的桥梁 在执行docker run命令时&#xff0c;使用**-v 本地目录&#xff1a;容器目录**可以完成本地目录挂载 eg.Mysql容器的数据挂载 1.在根目录root下创建目录mysql及三个子目录&#xff1a; cd ~ pwd m…

嵌入式学习第十一天

1.数组和指针的关系: 1.一维数组和指针的关系: int a[5] {1, 2, 3, 4, 5}; int *p NULL; p &a[0]; p a; 数组的数组名a是指向数组第一个元素的一个指针常量 a &a[0] a 的类型可以理解为 int * 有两种情况除…

常见の算法链表问题

时间复杂度 1.链表逆序 package class04;import java.util.ArrayList; import java.util.List;public class Code01_ReverseList {public static class Node {public int value;public Node next;public Node(int data) {value data;}}public static class DoubleNode {publi…

React16源码: React中commitAllHostEffects内部的commitDeletion的源码实现

commitDeletion 1 &#xff09;概述 在 react commit 阶段的 commitRoot 第二个while循环中调用了 commitAllHostEffects&#xff0c;这个函数不仅仅处理了新增节点&#xff0c;更新节点最后一个操作&#xff0c;就是删除节点&#xff0c;就需要调用 commitDeletion&#xff0…

行业应用 | Sophon AutoCV推动AI应用从模型生产到高效落地

随着技术市场和应用方向的逐渐成熟&#xff0c;人工智能与各行各业的结合和落地逐渐进入了深水区。 虽然由于行业规模化和应用普及度的限制&#xff0c;人工智能在“传统”行业的落地不如消费互联网行业&#xff0c;但是借助人工智能为“传统”行业的发展注入新能量一直是相关…

大文件传输之以太网UDP传输延迟解决方案

在数字化浪潮席卷全球的今天&#xff0c;数据已成为企业最宝贵的资产之一。随着企业规模的扩大和业务的全球化&#xff0c;大文件传输的需求日益增长&#xff0c;它不仅关系到企业内部数据的高效管理&#xff0c;也是与外部合作伙伴进行有效沟通的关键。然而&#xff0c;大文件…

STM32——创建HAL库工程

第一步 新建工程文件夹 所有文件夹存放的内容&#xff1a; 第二步 拷贝/新建工程相关文件 1、Drivers&#xff08;创建如下文件夹&#xff0c;除readme.txt&#xff09; 文件夹存放的内容&#xff1a; 2、Middlewares和output暂时不需要创建&#xff08;目前用不到&#x…

幻兽帕鲁一键开私服?超简单小白教程一看就会!

如何自建幻兽帕鲁服务器&#xff1f;基于阿里云服务器搭建幻兽帕鲁palworld服务器教程来了&#xff0c;一看就懂系列。本文是利用OOS中幻兽帕鲁扩展程序来一键部署幻兽帕鲁服务器&#xff0c;阿里云服务器网aliyunfuwuqi.com分享官方基于阿里云服务器快速创建幻兽帕鲁服务器教程…