Linux下文件编译器-GCC/G++

news2024/9/9 4:18:26

前言

本文介绍了c/c++的编译过程以及gcc/g++的时使用 

一.c/c++翻译的本质:将高级语言翻译成二进制

1)程序翻译过程:

(1)预处理(头文件展开、宏替换、去注释、条件编译)还是C语言代码

​        头文件展开:将头文件内容拷贝到源文件代码里面

​        条件编译:根据不同的宏定义进行编译、在预处理阶段会根据条件对代码进行裁剪

在gcc进行编译的时候,可使用-D选项传递不同的宏值

观察到main函数里面代码只剩下一行,剩下的被裁剪掉了

(2)编译(转为汇编语言)汇编文件

(3)汇编(汇编转为二进制)可重定位二进制文件

(4)连接()

二.gcc/g++的使用

1.默认编译

gcc/g++ 文件名

将源文件生成默认命名为a.out的可执行程序

2.指定名称

gcc/g++ 源文件名 -o 可执行程序名 或者 gcc/g++ -o 可执行程序名 源文件名

3.从现在开始翻译,到预处理截至

gcc -E 源文件 -o 预处理后文件.i

4.从现在开始翻译,到编译后截至

gcc -S 文件 -0 编译后文件.s

5.从现在开始翻译,到汇编后截至

gcc -c 文件名 -o 汇编后文件.o

6.从现在开始翻译,到连接后截至

gcc 文件名 -o 可执行文件名

生成可执行程序

7.查看可执行程序依赖的库

ldd 可执行程序名

 三、动静态库的理解——链接

Linux下面动态库后缀为.so,静态库后缀为.a

windows下面动态库后缀为.dll,静态库后缀为.lib

动静态库本质都是文件,头文件也是文件

1)动态库

被所有使用者共享,一旦确实,所有使用者都无法运行

优点:可以较大的节约资源,包括磁盘、内存、网络等,在更新时不需要重新编译整个程序,只需要把对应的动态库更换即可。

缺点:一旦缺失一个动态库,所有的程序都无法运行。

2)静态库

将运行所需要的代码拷贝一份到所执行程序中。

优点:独立性高,丢失一份不会影响其他程序的正常运行

缺点:会造成较大的资源浪费,且如果函数库更新,需要重新编译整个程序

通过比较可以看到,静态链接得到的可执行程序比动态链接得到的可执行程序大得多

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

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

相关文章

hash表如何形成,hash函数如何计算,什么是hash冲突 如何解决 ,Golang map的底层原理及扩容机制

散列表 散列表(hash表):根据给定的关键字来计算出关键字在表中的地址的数据结构。也就是说,散列表建立了关键字和 存储地址之间的一种直接映射关系。 问题:如何建立映射管血 散列函数:一个把查找表中的关键字映射成该关键字对应…

平移、旋转、缩放和媒体

一、平移 1.1translate()函数 做转换工作可以用translate()函数,这个函数可以改变坐标系。通过改变默认的坐标系,我们可以创建不同的转换方式,包括平移、旋转和缩放。 1.2平移位置案例 案例代码如图1 图1 保存运行如…

【大一公共课】C语言+python语言入门对比+思维导图

C 和 Python 入门教程对比 一、引言 C 语言和 Python 语言都是在编程领域中广泛使用的语言,但它们在语法、应用场景和学习难度上有很大的不同。本教程将对 C 和 Python 的入门知识进行对比,帮助您更好地理解和选择适合自己的编程语言。 二、C 语言入门 …

python爬取某财富网

过程: 点击底部的第3页,第5页,网页刷新了,但是顶部的url地址没有变。那么就是 动态加载, 就是 XHR. 直接请求api. 实验代码如下: import requestsheaders {"User-Agent": "Mozilla/5.0 (Windows NT…

LLM大模型:2024工业AI大模型发展分析

一、大模型为工业智能化发展带来新机遇 1.1. 大模型开启人工智能应用新时代 大模型引领人工智能技术创新和应用。 自 1956 年达特茅斯会议(Dartmouth Conference)提出人工智能的概念以来,人工智能技术经历了多个发展高峰和低谷。在这一长期的…

《深入浅出WPF》学习笔记一.解析WPF程序

《深入浅出WPF》学习笔记一.解析WPF程序 visual studio帮助我们做了那些事情 引用文件 输出文件类型 按照最原始的方式,我们需要手动打开编译器命令行,使用命令引用类库将代码编译成目标文件。 visual studio会根据我们选择的项目模板,自动…

Java学习Day19:基础篇9

包 final 权限修饰符 代码块 静态代码块在Java中是一个重要的特性,它主要用于类的初始化操作,并且随着类的加载而执行,且只执行一次。静态代码块的实践应用广泛,以下是几个主要的应用场景: 1. 初始化静态变量 静态代…

芋道源码yudao-cloud 二开日记(Editor富文本本地图片上传报错问题)

: 于是找到富文本的组件代码Editor.vue,检查一下上传的接口地址和token有没有传,如下图: 都没有问题,但还是报错,所以试试自定义上传的方法: // 导入上传文件的接口 import * as FileApi from …

数字图像处理 --- 二维离散余弦变换(python实战)

二维离散余弦变换(python实战) (注:文中所讨论的离散余弦变换都是DCT-II) 在上一篇文章中,我详细介绍了一维离散余弦变换的基本原理,并且以可视化的方式展示了一维DCT中用于分析输入信号的一系列基础余弦波。 在这篇文…

【简单图解 最强计网八股】HTTP 和 HTTPS 的区别

HTTP(HyperText Transfer Protocol 超文本传输协议) HTTPS(Hypertext Transfer Protocol Secure,超文本传输安全协议) 通过 传输内容加密 和 身份认证 保证了传输过程的安全性 协议传输内容加密身份认证响应效率端口号…

​LLM大模型从入门到精通(7)--企业大模型开发流程​

一、大模型项目开发的两种方式 2023年以来,随着ChatGPT的火爆,使得LLM成为研究和应用的热点,但是市面上大部分LLM都存在一个共同的问题:模型都是基于过去的经验数据进行训练完成,无法获取最新的知识,以及各…

Axure中继器:数据动态展示的强大工具

在Axure RP这一强大的原型设计工具中,中继器(Repeater)无疑是一颗璀璨的明珠。它以其独特的功能和广泛的应用场景,成为设计师在创建数据密集型原型时的首选。本文将深入探讨Axure中继器的特点、使用方式及其在数据动态展示中的重要…

新手小白如何投放知乎信息流广告推广?

随着越来越多的企业开始寻求更有效的方式来触达目标客户,知乎作为一个集知识分享、社交互动于一体的平台,已经成为众多品牌青睐的广告投放渠道之一。特别是知乎的信息流广告,因其高度融合的内容形式和精准的目标用户定向,成为了品…

ReactHooks(完结)

上期戳here ReactHooks[三] 一.memo 函数1.1 语法格式 二. useMemo2.1 问题引入2.2 语法格式2.3 使用 useMemo 解决刚才的问题 三.useCallback3.1 useMemo和useCallback区别3.2 语法格式 四.useTransition4.1 问题引入4.2 语法格式4.3 使用 isPending 展示加载状态4.4 注意事项…

Python3 | 练气期,捕获错误异常 、自定义异常处理!

[ 知识是人生的灯塔,只有不断学习,才能照亮前行的道路 ] 0x00 前言简述 在我们开始学习 Python 编程语言的时候, 我们经常会遇到各种错误, 比如:语法错误,运行时错误,逻辑错误等等, 这些错误在开发学习中是不可避免的, 但是随着我们学习的深入可以发现 Python 可以很好的处理…

Java 8-函数式接口

目录 一、概述 二、 函数式接口作为方法的参数 三、函数式接口作为方法的返回值 四、 常用的函数式接口 简单总结 简单示例 4.1 Consumer接口 简单案例 自我练习 实际应用场景 多线程处理 4.2 Supplier接口 简单案例 自我练习 实际应用场景 配置管理 4.3 Func…

UCC5320SCDWVR驱动SIC的功耗计算

驱动功耗可以通过分析器件的电气特性和推荐的电源电压来估算。以下是一些关键信息,用于估算功耗: 电源电流: 输入电源静态电流(IVCC1​):最小值为1.67 mA,典型值为2.4 mA。输出电源静态电流&am…

day33

类类型接口 静态属性和静态方法 区分方法就是必须要有 new什么东西 完成什么类 第二种类类型接口 字面量类类型接口 接口继承 接口继承接口 继承多个接口 接口可以继承多个,但是类只能继承一个 接口不能继承对象 接口继承类,仅继承类中对于实…

力扣高频SQL 50题(基础版)第二十六题

文章目录 力扣高频SQL 50题(基础版)第二十六题1667.修复表中的名字题目说明实现过程准备数据实现方式结果截图总结 力扣高频SQL 50题(基础版)第二十六题 1667.修复表中的名字 题目说明 表: Users ----------------…

Day7-指针专题二

1. 字符指针与字符串 C语言通过使用字符数组来处理字符串 通常,我们把char数据类型的指针变量称为字符指针变量。字符指针变量与字符数组有着密切关系,它也被用来处理字符串 初始化字符指针是把内存中字符串的首地址赋予指针,并不是把该字符串…