linux的常用操作——gcc

1.什么是gcc

\qquadgcc是linux中的一款编译源代码的文本编译器

2.编译过程

\qquad比如对hello.c文件进行编译,
\qquad首先,预处理器cpp对hello.c进行处理,cpp会把头文件展开,宏替换,注释去掉,经过cpp处理后,hello.c文件变为hello.i文件;
\qquad第二步,编译器gcc对hello.i进行处理,gcc会把C文件变为汇编文件,进过gcc处理后,hello.i文件变为hello.s文件;
\qquad第三步,汇编器as对hello.s进行处理,as会把汇编文件变为二进制文件,经过as处理后,hello.s文件变为hello.o文件;
\qquad最后,链接器ld对hello.o进行处理,ld会把函数库相应的代码组合到目标文件中,经过ld处理后,hello.o文件变为可执行文件。
\qquad在整个过程中,第二步最消耗时间。

3.基于linux的编译处理

\qquadlinux中使用gcc命令对filename.c文件进行处理。
\qquad从filename.c到filename.i

gcc -E filename.c -o filename.i

\qquad从filename.i到filename.s

gcc -S filename.i -o filename.s

\qquad从filename.s到filename.o

gcc -c filename.s -o filename.o

\qquad从filename.o到可执行文件

gcc filename.o -o app #app为可执行文件名,也可以取其它名字

\qquad从filename.c直接到可执行文件

gcc filename.c -o app

\qquad执行app

./app
4.gcc的参数

\qquad在进行编译时,源文件和头文件应该放在一个目录下,否则需要制定头文件的路径。

gcc filename.c -o app -I [filename.c的头文件路径] 
注意:filename.c位置应该包含所有.c文件,否则会编译失败,并且如果.c文件不再同一个文件夹下,应该采取路径方式,将所有.c文件都包含进来gcc ./sum/sum.c main -o myapp -I ./sum -I链接了头文件的位置,如果有多个头文件在不同位置,那么就需要每个头文件都需要一个-I。

\qquad在进行编译时,定义一个宏

gcc filename.c -o app -D 宏名

\qquad在进行编译时,对程序进行优化,优化等级分为O1,O2,O3

gcc filename.c -o app -O1

\qquad在进行编译时,输出警告信息

gcc filename.c -o app -Wall
5.gcc实例演示
  1. 目录结构
zhaoxr@zhaoxr-ThinkPad-E450:~/linux$ tree
.
├── head
│   ├── add.h
│   └── mul.h
└── source├── add.c├── main.c└── mul.c2 directories, 5 files
  1. gcc编译生成可执行文件
zhaoxr@zhaoxr-ThinkPad-E450:~/linux/source$ gcc add.c main.c mul.c -o app -I ../head
zhaoxr@zhaoxr-ThinkPad-E450:~/linux$ tree
.
├── head
│   ├── add.h
│   └── mul.h
└── source├── add.c├── app├── main.c└── mul.c2 directories, 6 files
  1. 执行
zhaoxr@zhaoxr-ThinkPad-E450:~/linux$ ./source/app 
a+b=19,a*b=90

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

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

相关文章

LeetCode 678. 有效的括号字符串

传送门:https://leetcode-cn.com/problems/valid-parenthesis-string 题目描述: 给定一个只包含三种字符的字符串:( ,) 和 *,写一个函数来检验这个字符串是否为有效字符串。有效字符串具有如下…

汪卫华院士:无序中找有序 复杂中寻规律

来源:中国科学报原文出处:《中国科学报》 (2021-10-11 第4版 综合)作者:汪卫华(作者系中国科学院院士、松山湖材料实验室主任)冰河时代为什么会周期性重复出现?是否有关于混沌和湍流系统更一般的数学描述&a…

霍金 | 哥德尔和物理学的终结

来源:爱思想转自:人机与认知实验室 作者:史蒂芬霍金 英国剑桥大学著名物理学家,现代最伟大的物理学家之一译者:凌高【感谢陈禹老师:"冯诺依曼说过,没有明确的概念,量得分析是毫…

BUAA_OO_第二单元作业总结

程序设计策略 第一次作业 第一次作业实现的是FAFS式傻瓜调度电梯,由于是第一次接触多线程,难度不是很大。在我的设计里,我借鉴了生产者消费者模式,设计了一个输入线程和一个电梯线程,控制器的设计使用了单例模式&#…

linux的常用操作——静态库

1.静态库的制作 1.1静态库的命名 \qquad静态库一律使用lib打头,静态库名为:lib静态库的名字.a。比如:libmylibrary.a,这里面lib和.a是必须要有的。使用nm命令可以查看静态库。 nm 静态库名1.2静态库的制作步骤 \qquad第一步&…

蓝桥杯 回文日期

模拟 n int(input())def check(x):m int(x[:2])d int(x[2:4])x int(x)if 1<m<12:if m 2:if (x%40 and x%100!0) or x%4000:if d<29:return Trueelse:return Falseelse: if d<28:return Trueelse:return Falseif m in [1,3,5,7,8,10,12]:if d<31:return Tr…

因果推断研究获2021诺贝尔经济学奖

来源&#xff1a;集智俱乐部 北京时间2021 年 10 月 11 日 17 时许&#xff0c;2021 年诺贝尔经济学奖&#xff0c;授予了三位经济学家——David Card因为对“对劳动经济学的实证研究贡献”而获得一半奖金&#xff0c;Joshua D. Angrist和Guido W. Imbens因“对因果关系分析的方…

Leetcode 82. Remove Duplicates from Sorted List II

利用一个虚拟头节点,和维护一个前置节点. # Definition for singly-linked list. # class ListNode: # def __init__(self, x): # self.val x # self.next Noneclass Solution:def deleteDuplicates(self, head: ListNode) -> ListNode:if not head o…

【计算机网络复习】1.1.1 概念、组成、功能和分类

概念、组成、功能和分类二、功能三、组成四、分类计算机网络&#xff1a;是一个将分散的、具有独立功能的计算机系统&#xff0c;通过通信设备与线路连接起来&#xff0c;由功能完善的软件实现资源共享和信息传递的系统。 计算机网络是互连的、自治的计算机集合。 互连 — 互…

linux的常用操作——共享库

1.共享库的命名规则 \qquad共享库&#xff0c;即动态库。库名&#xff1a; lib库名.so 2.共享库的制作 2.1生成与位置无关的.o文件 gcc -fpic -c filename.c -I 头文件路径2.2生成共享库 gcc -shared -o 共享库名 要打包的.o文件 -I 头文件路径2.3生成可执行文件 gcc file…

因果表征学习最新综述:连接因果科学和机器学习的桥梁

来源&#xff1a;集智俱乐部作者&#xff1a;蔡心宇审校&#xff1a;龚鹤扬、陆超超编辑&#xff1a;邓一雪论文题目&#xff1a;Towards Causal Representation Learning论文地址&#xff1a;https://arxiv.org/abs/2102.11107这篇名为Towards Causal Representation Learning…

【计算机网络复习】1.1.2 标准化工作及相关组织

标准化工作及相关组织一、标准化工作二、标准化工作的相关组织一、标准化工作 标准 法定标准&#xff1a;由权威机构指定的正式的、合法的标准&#xff08;如OSI&#xff09;事实标准&#xff1a;某些公司的产品在竞争中占据了主流&#xff0c;时间长了&#xff0c;这些产品中…

推荐几个练习听力不错的国外网站

http://www.uptoten.com/ 是美国针对学前教育&#xff08;0到10岁&#xff09;的听力网站&#xff0c;主题非常丰富&#xff0c;拥有大量英文歌曲、卡通片、绘画、游戏等栏目&#xff0c;启发儿童在艺术、健康、语言、社会、科学多元思维能力&#xff0c;在好玩又有趣的氛围下&…

linux的常用操作——程序调试gdb

1.如何在linux下调试程序&#xff1f; \qquad在进行程序编译时&#xff0c;如果需要调试&#xff0c;那么需要加入调试指令。 gcc filename.c -o 可执行文件名 -g\qquad对程序进行调试 gdb 可执行文件名2.调试的基础操作 \qquad在gdb的界面下的操作&#xff1a;查看 l #默认…

这种记忆技术在弯曲时更好?

A new kind of flexible phase change memory is tested while bent around a 4-millimeter-diameter rod. A.I. KHAN AND A. DAUS来源&#xff1a;IEEE电气电子工程师新的相变存储器需要更少的能量&#xff0c;部分原因是它是建立在塑料上的&#xff1f;要想让粘贴式显示器、…

【计算机网络复习】1.1.3 速率相关的性能指标

速率相关的性能指标一、速率二、带宽三、吞吐量一、速率 速率即数据率或称数据传输率或比特率。 比特 &#xff1a; 1/0 位 连接在计算机网络上的主机在数字信道上传送数据位数的速率。 单位是b/s&#xff0c;kb/s&#xff0c;Mb/s&#xff0c;Gb/s&#xff0c;Tb/s 速率 …

linux的常用操作——makefile

1.makefile是什么&#xff1f; \qquadmakefile是linux下的一个代码管理工具。 2.makefile文件的命名 \qquadmakefile的命名&#xff1a;首字母大写即&#xff1a;Makefile&#xff1b;或者全部小写&#xff1a;makefile。 3.makefile文件的规则 \qquad规则三要素&#xff1a;…

接口与内部类

1.什么是接口(B) 接口是一种引用数据类型&#xff0c;用interface声明&#xff1b;当出现interface便可判断为接口。 形式&#xff1a;【修饰符】 interface 接口名称(public interface Pepar{ }) 接口可声明属性&#xff0c;且属性都默认为static final 1 public interface Pa…

深度学习为何泛化的那么好?秘密或许隐藏在内核机中

来源&#xff1a;AI科技评论编译&#xff1a;杏花编辑 &#xff1a;青暮在机器学习领域&#xff0c;人工神经网络逐年扩大规模&#xff0c;并取得了巨大成功&#xff0c;但同时它也制造了一个概念性难题。当一个名为 AlexNet网络在2012年赢得年度图像识别比赛时&#xff0c;大约…

linux的常用操作——压缩和解压缩

1.gzip和bzip2 \qquadgzip和bzip2的处理解压和压缩的功能并不强大&#xff0c;一是&#xff1a;不能处理打包压缩&#xff1b;二是&#xff1a;gzip压缩不保留原文件&#xff0c;bzip2 -k 要压缩的文件可以保留原文件&#xff1b;三是&#xff1a;只能压缩文件&#xff0c;不能…