编译链接的流程

编译链接的流程

编译链接是将源代码转换为可执行程序的过程,一般包括以下几个步骤:

  1. 预处理(Preprocessing):预处理器根据以字符 ‘#’ 开头的预处理指令,对源代码进行处理。这些指令可以包括宏定义、头文件引用等。预处理后的代码被保存在临时文件中。
  2. 编译(Compilation):编译器将预处理后的代码翻译成汇编语言。它会进行语法和语义检查,并将源代码翻译成机器能够理解的中间代码(汇编代码),也称为目标代码(Object Code)。
  3. 汇编(Assembly):汇编器将目标代码转换成机器码指令。每条汇编语句对应一条机器指令。这个过程生成的文件通常称为目标文件(Object File)。
  4. 链接(Linking):链接器将多个目标文件(或库文件)合并生成最终的可执行文件。它会解决函数和符号的引用关系,将目标文件中的符号地址与实际可执行文件中的地址进行关联。链接过程还会进行地址重定位、符号解析和符号表管理等操作,确保程序的正确执行。

链接过程中可能会生成动态链接文件(Dynamic Link Library,DLL)或静态链接文件(Static Link Library,LIB)。静态链接会将目标文件中需要使用的代码和数据复制到最终可执行文件中,而动态链接则将其保留为独立的文件,在程序运行时由操作系统动态加载。

gcc 命令如下

gcc -E input.c -o output.i // 将 input.c 文件预处理成 output.i 文件
gcc -c input.c -o output.o // 将 input.c 文件编译成 output.o 文件
gcc -S input.c -o output.s // 将 input.c 文件编译成 output.s 汇编文件
gcc input1.c input2.c -o output // 将多个.c文件链接成可执行文件

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

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

相关文章

Spring源码分析(十)Bean实例化(下)

目录 1.1 循环依赖1.2 属性填充1.2.1 populateBean方法1.2.2 initializeBean方法执行Aware方法执行BeanPostProcessor后置处理器的前置处理方法执行初始化方法执行BeanPostProcessor后置处理器的后置处理方法:postProcessAfterInitialization(),允许对be…

MySQL数据库基本操作

目录 一、数据库中常用的数据类型 二、常用命令与操作 1.DDL数据库定义语言 1、登录用户的数据库 2、查看当前服务器中的数据库 3、切换/进入数据库 并 查看数据库中包含的表 4、查看数据库中表的结构 5、创建数据库 7、展示创建数据表时的结构 8、创建表&#xff0c…

clickhouse中replacingMergeTree

ReplacingMergeTree是在MergeTree上添加了去重的功能,但是这个功能不可控,合并是一个后台的操作,除非手动触发,不然无法控制,并且它会删除具有相同(区内)主键的重复项。 特点: 1,去重时机不定&a…

Linux 三剑客

grep grep主打的就是查找功能 ,它能够在一个或者多个文件中搜索某一特定的字符模式。 grep的语法 grep [选项] 模式 文件名 先说选项: 1.选项 要么是正则要么是字符串 -c 列出共出现多少次 -i 忽略大小写 -n 在前面列出行号 -v …

阿里云centos9stream安装宝塔+vscode(code-server)集成云端开发环境

一、 安装宝塔面板 官网 https://www.bt.cn/new/download.htm 题外话:虽然感觉现在宝塔没以前好用了,而且有centos7、8 mysql编译导致OOM服务器挂掉无法ssh登录的情况,但他还是远程管理服务器的好选择,提示宝塔只支持最新的centos…

常见矿石材质鉴定VR实训模拟操作平台提高学员的学习效果和实践能力

随着“元宇宙”概念的不断发展,在矿山领域中,长期存在传统培训内容不够丰富、教学方式单一、资源消耗大等缺点,无法适应当前矿山企业发展需求的长期难题。元宇宙企业借助VR虚拟现实、web3d开发和计算机技术构建的一个虚拟世界,为用…

SpringBoot虚拟路径映射

要求:访问:127.0.0.1/image/下的文件时,自动映射到真实路径:D:Files\。 virtualFileDepositPath: /image/** realityFileDepositPath: C:\Users\xin\Desktop\imgCreate\Files\ import org.springframework.beans.factory.annota…

编写c语言程序调用openssl编译出的动态链接库

文章目录 一、编译生成链接库二、示例一:调用RAND_bytes函数三、示例二:调用SHA256 一、编译生成链接库 下载安装openssl并编译生成链接库的过程在我的另一篇文章中已经详细说明了:Ubuntu中安装OpenSSL 此外,我们还需要提前了解…

【如何获取数据库表的字段并拼接】

获取数据库表的字段并拼接 需求场景操作步骤获取该数据库对应表中所有的字段对获取到的字段进行处理 需求场景 在写sql语句时,我要获取到该表的大部门字段来做处理,一个个粘贴复制太费事了,所以我决定执行sql语句把表中字段查询出来 操作步…

微服务之Nacos

1 版本说明 官网地址: https://github.com/alibaba/spring-cloud-alibaba/wiki/%E7%89%88%E6%9C%AC%E8%AF%B4%E6%98%8E 1.1 2021.x 分支 适配 SpringBoot 2.4, Spring Cloud 2021.x 版本及以上的Spring Cloud Alibaba 版本如下表(最新版本用*标记&am…

pytorch/tensorflow 直接给张量中的某个位置的值赋值,操作不可导。

问题:给一个tensor A中[i,j],赋值p。直接操作A[i,j]p可能会导致值覆盖,操作不可导。 解决方案:通过引入一个额外的mask实现。 mask[i,j] 0 mask tf.convert_to_tensor(mask, dtypetf.float32) A (A * mask) (p * (1-mask))p…

建造者与工厂方法的区别

建造者模式最主要的功能是基本方法的调用顺序安排,也就是这些基本方法已经实现了,通俗地说就是零件的装配,顺序不同产生的对象也不同;而工厂方法则重点是创建,创建零件是它的主要职责,组装顺序则不是它关心…

了解XSS攻击与CSRF攻击

什么是XSS攻击 XSS(Cross-Site Scripting,跨站脚本攻击)是一种常见的网络安全漏洞,它允许攻击者在受害者的浏览器上执行恶意脚本。这种攻击通常发生在 web 应用程序中,攻击者通过注入恶意脚本来利用用户对网站的信任&…

springboot Actuator未授权访问漏洞

management:endpoints:enabled-by-default: false #关闭所有默认端点关闭所有端点(开启时默认开放info和health)endpoint:# 开启你想开放的端点info:enabled:true #开启info端点 其他相关配置说明 Spring Boot 2.X 中&#xff0…

freemarker

freemarker Freemarker的基本语法及使用大全 freemarker的基本语法及入门基础 文本&#xff1a;直接输出的内容部分注释&#xff1a;不会输出的内容&#xff0c;格式为<#-- 注释内容 -->取值(插值)&#xff1a;代替输出数据模型的部分&#xff0c;格式为${数据模型}或…

RHCE——十三、Shell自动化运维编程基础

Shell 一、为什么学习和使用Shell编程二、Shell是什么1、shell起源2、查看当前系统支持的shell3、查看当前系统默认shell4、Shell 概念 三、Shell 程序设计语言1、Shell 也是一种脚本语言2、用途 四、如何学好shell1、熟练掌握shell编程基础知识2、建议 五、Shell脚本的基本元素…

docker-compose安装opengauss数据库

文章目录 1. docker-compose.yaml2. 部署3. 卸载4. 连接 1. docker-compose.yaml mkdir -p /root/i/docker-compose/opengauss && cd /root/i/docker-compose/opengausscat <<EOF> /root/i/docker-compose/opengauss/docker-compose.yaml version: 3 service…

计算机竞赛 基于机器视觉的停车位识别检测

简介 你是不是经常在停车场周围转来转去寻找停车位。如果你的车辆能准确地告诉你最近的停车位在哪里&#xff0c;那是不是很爽&#xff1f;事实证明&#xff0c;基于深度学习和OpenCV解决这个问题相对容易&#xff0c;只需获取停车场的实时视频即可。 该项目较为新颖&#xf…

MongoDB实验——在MongoDB集合中查找文档

在MongoDB集合中查找文档 一、实验目的二、实验原理三、实验步骤1.启动MongoDB数据库、启动MongoDB Shell客户端2.数据准备-->person.json3.指定返回的键4 .包含或不包含 i n 或 in 或 in或nin、$elemMatch&#xff08;匹配数组&#xff09;5.OR 查询 $or6.Null、$exists7.…