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

news2024/10/5 22:25:12

使用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.链接阶段

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Atlassian 停服 Bitbucket?三步快速迁移至极狐GitLab

之前的文章Jira 母公司全面停服 Server 产品&#xff0c;用户如何迁移至极狐GitLab提到了 Atlassian 将在 2 月 15 日以后停止对 Server 端产品的服务支持&#xff0c;此后用户将无法像之前一样继续使用 Jira、Bitbucket、Bamboo、Confluence 这些产品了。如果用户想要继续使用…

【QT+QGIS跨平台编译】之十三:【giflib+Qt跨平台编译】(一套代码、一套框架,跨平台编译)

文章目录 一、giflib介绍二、文件下载三、文件分析四、pro文件五、编译实践一、giflib介绍 GIFlib(又称为Libgif)是一个开源的C语言库,用于处理GIF图像格式。它提供了一组函数和工具,使得开发者可以读取、写入和操作GIF图像文件。 GIFlib支持GIF87a和GIF89a两种版本的GIF格…

Unity应用在车机上启动有概率黑屏的解决方案

问题描述 最近将游戏适配到车机上&#xff08;Android系统&#xff09;&#xff0c;碰到了一个严重bug&#xff0c;启动的时候有概率会遇到黑屏&#xff0c;表现就是全黑&#xff0c;无法进入Unity的场景。 经过查看LogCat日志&#xff0c;也没有任何报错&#xff0c;也没有任…

智慧交通的“大脑”与“神经”:物联网与车联网双轮驱动,智慧交通加速驶入未来

目录 一、物联网&#xff1a;智慧交通的“大脑” 二、车联网&#xff1a;智慧交通的“神经” 三、物联网与车联网的协同发展 四、智慧交通的未来展望 五、物联网与车联网在智慧交通中的应用案例 六、智慧交通面临的挑战与解决方案 七、政策与法规在智慧交通发展中的作用…

【数据库】聊聊explain如何优化sql以及索引最佳实践

在实际的开发中&#xff0c;我们难免会遇到一些SQL优化的场景&#xff0c;虽然之前也看过周阳的课程&#xff0c;但是一直没有进行细心的整理&#xff0c;所以本篇会进行详细列举explain的相关使用&#xff0c;以及常见的索引最佳实践&#xff0c;并通过案例进行讲解。 数据准…

Kafka-服务端-PartitionLeaderSelector、ReplicaStateMachine

PartitionLeaderSelector 通过对前面的分析可知&#xff0c;PartitionMachine将Leader副本选举、确定ISR集合的工作委托给了PartitionLeaderSelector接口实现&#xff0c;PartitionMachine可以专注于管理分区状态。这是策略模式的一种典型的应用场景。 图展示了PartitionLead…

数据库 sql select *from account where name=‘张三‘ 执行过程

select *from account where name张三分析上面语句的执行过程 用到了索引 由于是根据 1.name字段进行查询&#xff0c;所以先根据name张三’到name字段的二级索引中进行匹配查 找。但是在二级索引中只能查找到 Arm 对应的主键值 10。 2.由于查询返回的数据是*&#xff0c…

mac上搭建hbase伪集群

1. 前言 之前我们已经搭建过了 hbase单点环境&#xff0c;(单机版搭建参见&#xff1a; https://blog.csdn.net/a15835774652/article/details/135569456) 但是 为了模拟一把集群环境 我们还是尝试搭建一个伪集群版 2. 环境准备 jdk环境 1.8hdfs &#xff08;hadoop环境 可选…

Spring Boot 中 Service 层依赖注入问题

目录 问题描述 产生错误 问题原因 解决方法 手动注入方法 1、使用工具集 hutool&#xff0c;引入 Maven 依赖 2、编写 SpringUtil 工具类 问题描述 Controller 层方法为 static 静态&#xff0c;引入 Service 层时使用 Autowired 注解自动装配&#xff0c;Controller层方…

支持下一代网络IpV6的串口服务器,IpV6串口485接口转网口

和IPv4比较&#xff0c;IPv6有两个极具吸引力的特点&#xff1a;一个是IPv6采用的128位地址格式&#xff0c;而IPv4采用32位的地址格式&#xff0c;因此IPv6使地址空间增大了296&#xff1b;另一个是IPv6物联网数据业务具有更强的支持能力&#xff0c;成为未来物联网的重要协议…

解锁一些SQL注入的姿势

昨天课堂上布置了要去看一些sql注入的案例&#xff0c;以下是我的心得&#xff1a; ​​​​​​​ ​​​​​​​ ​​​​​​​ 1.新方法 打了sqli的前十关&#xff0c;我发现一般都是联合查询&#xff0c;但是有没有不是联合查询的方法呢&#xf…

2.2.分支结构-if语句

if语句的语法格式&#xff08;一&#xff09; if(布尔表达式){ // 语句 } 如果布尔表达式结果为true&#xff0c;执行if中的语句&#xff0c;否则不执行。 if语句的语法格式&#xff08;二&#xff09; if(布尔表达式){ // 语句1 }else{ // 语句2} 如果布尔表达式结果为true&a…

探索 SOAP:揭开 Web 服务的神秘面纱(下)

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

深入解析HTTPS:安全机制全方位剖析

随着互联网的深入发展&#xff0c;网络传输中的数据安全性受到了前所未有的关注。HTTPS&#xff0c;作为HTTP的安全版本&#xff0c;为数据在客户端和服务器之间的传输提供了加密和身份验证&#xff0c;从而确保了数据的机密性、完整性和身份真实性。本文将详细探讨HTTPS背后的…

PyInstaller 将 Python 程序生成可直接运行的程序

图标转换地址&#xff1a;https://convert.app/#google_vignette 官方文档&#xff1a;https://readthedocs.org/projects/pyinstaller/downloads/pdf/stable/#page20 安装pyinstaller pip install pyinstaller执行打包 pyinstaller -i ./resource/w.icns -w -F whv.py --a…

HarmonyOS漫谈---套壳安卓还是套壳苹果?HarmonyOS更像谁?

2020年以前华为手机的操作系统是EMUI,这个是在Android基础上扩展而来的,版本和android几乎一致,和市面上其它android手机厂家搭载的系统并无本质不同 2019年5月16日,美国针对华为发起了第一轮制裁。8月华为发布了HarmonyOS1.0,此时还只是主要在IOT设备上使用,智慧屏成为…

CSS基础细节学习

一.CSS--网页的美容师 CSS是层叠样式表( Cascading Style Sheets )的简称&#xff0c;有时我们也会称之为CSS样式表或级联样式表。 CSS是也是一种标记语言&#xff0c;CSS主要用于设置HTML页面中的文本内容(字体、大小对齐方式等)、图片的外形(宽高、边框样式、边距等)以及版面…

概念性——了解 SQL 约束

前些天发现了一个人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;最重要的屌图甚多&#xff0c;忍不住分享一下给大家。点击跳转到网站。 概念性——了解 SQL 约束 介绍 在设计数据库时&#xff0c;有时我们可能希望对某些列中允许的数据进行限制。例…

QT发生弹出警告窗口

QTC开发程序弹出警告窗口&#xff0c;如上图 实施代码&#xff1a; #include <QMessageBox> int main() {// 在发生错误的地方QMessageBox::critical(nullptr, "错误", "发生了一个错误&#xff0c;请检查您的操作。");}上面的文字可以更改&#x…

python实现的简化版构建Kdtree(k=2)

Python Kdtree 使用示例 文章目录 Python Kdtree 使用示例一、关于 KDTree二、关于最近邻搜索三、复杂度分析四、python实现的简化版构建k-d tree&#xff08;k2&#xff09; 一、关于 KDTree 点云数据主要是&#xff0c; 表征 目标表面 的海量点集合&#xff0c; 并不具备传统…