liunx gcc编译器 以及编译过程

liunx编译器gcc 编译过程

  • 编译过程
  • gcc
    • gcc的条件编译
    • gcc 编译指令
    • 动态库和静态库

编译过程

  1. 预处理
    (1)将所有的#define删除,并且展开所有的宏定义。说白了就是字符替换

(2)处理所有的条件编译指令,#ifdef #ifndef #endif等,就是带#的那些

(3)处理#include,将#include指向的文件插入到该行处

(4)删除所有注释
(5)头文件展开
2. 编译

编译的过程实质上是将高级语言翻译成机器语言的过程,即对a.c做了这些事:

(1)词法分析

(2)语法分析

(3)语义分析

(4)优化后生成相应的汇编代码

注:高级语言——>汇编语言——>机器语言(二进制)
3. 汇编

gcc -c hello.c -o a.o 是将源文件翻译成二进制文件,类Unix系统编译的结果生成.o文件,Windows系统生成的是.obj文件。

所以,编译过程就是讲.c文件翻译成二进制文件。

汇编器是将汇编代码转变成机器可以执行的命令,每一个汇编语句几乎都对应一条机器指令。汇编相对于编译过程比较简单,根据汇编指令和机器指令的对照表一一翻译即可。

由于a.o是机器码,不能以纯文本的形式打开(vim打开是乱码的)。

  1. 链接

就像hello.c中使用到了C标准库的东西“printf”,但是编译过程只是将源文件翻译成二进制文件而已,这个二进制文件还不能直接执行,还需要一个动作:将翻译成的二进制文件与需要用到的库绑定在一块。

gcc hello.c -o a.out 可以生成可执行程序,即gcc不带任何参数。ldd命令可以查看你的可执行程序所依赖的库。

gcc

gcc的条件编译

在这里插入图片描述
在这里插入图片描述
v1不同 输出结果不同
在这里插入图片描述

gcc 编译指令

动态库和静态库

一图看懂动静库

请添加图片描述
在liunx中,都是用动态库编译。
当然,你也可以使用静态库
-static 此选项对生成的文件采用静态链接
在这里插入图片描述在这里插入图片描述

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

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

相关文章

信息安全计划:它是什么、为什么需要一个以及如何开始

每个组织都需要一个信息安全计划,因为数据已成为世界上最有价值的商品。与所有珍贵的东西一样,数据受到管理机构的严格监管,并且受到每个人(包括骗子)的觊觎。这就是网络犯罪不断增加的原因——与日益严格的合规环境同…

pdffactory pro 8中文破解版

详细介绍 PdfFactory,PDF文档虚拟打印机,无须Acrobat即可创建Adobe PDF文件,创建PDF文件的方法比其他方法更方便和高效。支持将多个文档整合到一个PDF文件、增加字体和便签、PDF加密、去水印、压缩优化。 FinePrint,Windows虚拟…

DAY29--learning English

一、积累 1.sign up for 2.business trip 3.calendar 4.acne 5.band-aid 6.scar 7.prescription 8.pimple 9.saucy 10.slurp 11.germaphobe 12.shred 13.boggle 14.platser 15.lick 16.sling 17.smack 18.stereotype 19.salmon 20.cable 二、练习 1.牛津原译 calendar. /ˈk…

【编译原理】第五章课后习题(王原生第三版)

前言 课本: 编译原理(第三版)[王生原、董渊…等编著]习题: 主要习题内容是第一章到第八章,具体内容如下表 章节内容链接第一章课后部分选择题https://blog.csdn.net/Zchengjisihan/article/details/136243955第二章课…

Linux的进程

在Linux中,可以使用多种方式来结束进程。以下是8种常见的方式: 终端中断(Ctrl C):在终端中运行的程序可以通过按下Ctrl C组合键来发送SIGINT信号,终止该进程的执行。 kill命令:使用kill命令可…

仿12306校招项目业务一(支付)

业务流程 1. 用户发起支付 当用户抢到票后,开始发起订单支付请求,假设选择支付宝作为支付方式,支付流程如下。 2. 支付结果回调 当用户支付完一笔订单,支付宝付款渠道接收到支付结果后,对请求支付的系统进行支付结果…

线程池(ThreadPoolExecutor,as_completed)和scrapy框架初步构建——学习笔记

用法1:map函数 with ThreadPoolExecutor() as pool: results pool.map(craw,utls)for result in results:print(result) 1.Scrapy框架: 五大结构:引擎,下载器,爬虫,调度器,管道&#x…

Flask数据库操作-Flask-SQLAlchemy

Flask中一般使用flask-sqlalchemy来操作数据库。flask-sqlalchemy的使用介绍如下: 一、SQLAlchemy SQLALchemy 实际上是对数据库的抽象,让开发者不用直接和 SQL 语句打交道,而是通过 Python 对象来操作数据库,在舍弃一些性能开销…

udp服务器【Linux网络编程】

目录 一、UDP服务器 1、创建套接字 2、绑定套接字 3、运行 1)读取数据 2)发送数据 二、UDP客户端 创建套接字: 客户端不用手动bind 收发数据 处理消息和网络通信解耦 三、应用场景 1、服务端执行命令 2、Windows上的客户端 3…

Visual Studio:Entity设置表之间的关联关系

1、选择表并右键-》新增-》关联 2、设置关联的表及关联关系并“确定”即可

基于Docker和Springboot两种方式安装与部署Camunda流程引擎

文章目录 前言1、Docker安装1.1、拉取Camunda BPM镜像1.2、编写docker启动camunda容器脚本1.3、docker启动脚本1.4、访问验证 2、SpringBoot启动2.1、下载地址2.2、创建SpringBoot项目并配置基础信息2.3、下载SpringBoot项目并在idea中打开2.4、pom修改2.5、application.yml配置…

软件实例,物流货运配货单打印模板软件单据打印查询管理系统软件教程,可以同时打印标签或补打

软件实例,物流货运配货单打印模板软件单据打印查询管理系统软件教程,可以同时打印标签或补打 一、前言 以下软件教程以 佳易王物流单打印查询系统V17.1为例说明 软件文件下载可以点击最下方官网卡片——软件下载——试用版软件下载 这个版本在原来基…

PyTorch概述(五)---LINEAR

torch.nn.Linear torch.nn.Linear(in_features,out_features,biasTrue,deviceNone,dtypeNone) 对输入的数据应用一个线性变换: 该模块支持TensorFLoat32类型的数据;在某些ROCm设备上,使用float16类型的数据输入时,该模块在反向传…

C++面试题精选与解析

C面试题精选与解析 一、基础与语法 请问C中的指针和引用有什么区别? 指针是一个变量,存储的是另一个变量的内存地址。指针可以被重新赋值以指向另一个不同的对象。而引用是某个变量的别名,一旦引用被初始化为一个变量,就不能改变…

Java 学习和实践笔记(20):static的含义和使用

static的本义是静止的。在计算机里就表示静态变量。 在Java中,从内存分析图上可以看到,它与类、常量池放在一个区里: 从图可以看到,普通的方法和对象属性,都在heep里,而static则在方法区里。 static声明的…

数据结构-查找与排序

数据结构再往后就是比较零散的各种操作&#xff0c;查找与排序是其中最常出现的&#xff0c;今天来总结一下常用的查找与排序所用的方法 查找 顺序查找 最简单的查找方式&#xff0c;遍历&#xff0c;然后比较 bool search1(int *a,int n,int k){for (int i1;i<n;i){//遍…

Guitar Pro8.2吉他软件2024中文版功能特点介绍

Guitar Pro 8.2是一款功能强大的吉他乐谱软件&#xff0c;专为吉他手、音乐制作人和音乐爱好者设计。它提供了丰富的功能&#xff0c;帮助用户轻松创建、编辑、打印和分享吉他乐谱。以下是Guitar Pro 8.2的主要功能特点&#xff1a; Guitar Pro 2024 win-安装包下载如下&#x…

【Redis】常见的5种数据类型(上)

文章目录 1 :peach:前言:peach:2 :peach:Redis 基本的全局命令:peach:2.1 :apple:keys:apple:2.2 :apple:exists:apple:2.3 :apple:del:apple:2.4 :apple:expire:apple:2.5 :apple:ttl:apple:2.6 :apple:type:apple: 3 :peach:单线程架构:peach:4 :peach:Redis 的 5 种常见数据…

Java面试题之Redis

Redis相关面试题解 题一&#xff1a;RDB 和 AOF 机制的优缺点RDB&#xff1a;Redis DataBaseAOF&#xff1a;Append Only File 题二&#xff1a;Redis的过期键的删除策略惰性过期定期过期 题三&#xff1a;Redis线程模型、单线程快的原因题四&#xff1a;简述Redis事务实现1、事…

【Java程序员面试专栏 数据结构】六 高频面试算法题:字符串

一轮的算法训练完成后,对相关的题目有了一个初步理解了,接下来进行专题训练,以下这些题目就是汇总的高频题目,本篇主要聊聊数组,包括数组合并,滑动窗口解决最长无重复子数组问题,图形法解下一个排列问题,以及一些常见的二维矩阵问题,所以放到一篇Blog中集中练习 题目…