当前位置: 首页 > wzjs >正文

设计学网站建设网站公司推荐

设计学网站,建设网站公司推荐,惠州网络科技有限公司,宁波江北建设局网站一.概述 C/C程序的构建是一个多阶段的过程,从源代码到最终可执行文件需要经历预处理、编译、汇编和链接四个主要阶段。 二.各个阶段详述 1.预处理阶段 (Preprocessing) 输入:源代码(.c/.cpp) 头文件(.h) 输出:预处理后的源文件(.i/.ii) …

一.概述

C/C++程序的构建是一个多阶段的过程,从源代码到最终可执行文件需要经历预处理、编译、汇编和链接四个主要阶段。

二.各个阶段详述

1.预处理阶段 (Preprocessing)

输入:源代码(.c/.cpp) + 头文件(.h)

输出:预处理后的源文件(.i/.ii)

工具:预处理器(cpp)

主要任务:

头文件包含:处理#include指令,将头文件内容插入源文件

宏展开:替换所有#define定义的宏

条件编译:处理#ifdef、#ifndef、#endif等指令

删除注释:移除所有单行(//)和多行(/* */)注释

添加行标记:插入#line指令,用于调试和错误报告

示例命令:

gcc -E main.c -o main.i  # GCC

cl /E main.cpp > main.ii # MSVC

2.编译阶段 (Compilation)

输入:预处理后的源文件(.i/.ii)

输出:汇编代码文件(.s)

工具:编译器(gcc/clang/cl)

主要任务:

词法分析:将源代码分解为标记(tokens)

语法分析:构建抽象语法树(AST)

语义分析:检查类型兼容性、变量声明等

中间代码生成:生成与平台无关的中间表示(IR)

代码优化:进行各种优化(常量折叠、死代码消除等)

目标代码生成:生成特定CPU架构的汇编代码

示例命令:

gcc -S main.i -o main.s  # GCC

cl /FAs main.cpp         # MSVC (生成.asm汇编文件)

3.汇编阶段 (Assembly)

输入:汇编代码文件(.s)

输出:目标文件(.o/.obj)

工具:汇编器(as)

主要任务:

将汇编指令逐条翻译为机器指令

生成目标文件(包含机器码、符号表和重定位信息)

生成节(Section):代码段(.text)、数据段(.data)、BSS段(.bss)等

目标文件结构:

文件头:描述文件属性

节头表:描述各节的位置和属性

.text节:机器指令

.data节:已初始化的全局/静态变量

.bss节:未初始化的全局/静态变量

符号表:函数和变量名及其地址

重定位表:需要链接器修正的地址

示例命令:

as main.s -o main.o      # GCC

cl /c main.cpp           # MSVC (生成.obj文件)

4.链接阶段 (Linking)

输入:目标文件(.o/.obj) + 库文件(.a/.lib)

输出:可执行文件/共享库(.exe/.dll/.so)

工具:链接器(ld/link)

主要任务:

(1) 符号解析 (Symbol Resolution)

解决所有未定义的符号引用

在目标文件和库中查找符号定义

确保每个符号都有唯一明确的定义

(2) 重定位 (Relocation)

合并所有目标文件的相同节

为代码和数据分配最终内存地址

修正代码中的相对地址和绝对地址

(3) 库处理

静态链接:将库代码直接复制到可执行文件中

动态链接:记录库的引用,运行时加载

链接类型对比:

示例命令:

# 静态链接

gcc main.o utils.o -o app -static

# 动态链接

gcc main.o utils.o -o app -lm

# MSVC链接

link main.obj utils.obj /OUT:app.exe

三.关键概念详解

1.符号表 (Symbol Table)

存储所有全局符号(函数、全局变量)

包含符号类型(定义/引用)、大小和位置信息

使用nm工具查看(Unix)或dumpbin /SYMBOLS(Windows)

2.重定位 (Relocation)

修正代码中的地址引用

类型:

PC相对寻址:函数调用、条件跳转

绝对寻址:全局变量访问

重定位信息存储在目标文件的重定位表中

3.名称修饰 (Name Mangling)

C++特有的函数名编码机制

考虑命名空间、类名、参数类型等

目的:支持函数重载

示例:void foo(int) → _Z3fooi

4.静态库 vs 动态库

静态库(.a/.lib):

归档文件(ar命令创建)

本质是目标文件的集合

链接时提取需要的目标文件

动态库(.so/.dll):

包含位置无关代码(PIC)

导出函数表供运行时查找

需要处理符号版本控制和ABI兼容

5.完整构建过程(GCC)

(1)预处理

gcc -E main.c -o main.i

(2)编译

gcc -S main.i -o main.s

(3)汇编

as main.s -o main.o

(4)链接

ld main.o -o app -lc

四.现代构建系统

实际开发中通常使用构建系统管理复杂项目:

http://www.dtcms.com/wzjs/581915.html

相关文章:

  • flask做的网站国内十个免费自学网站
  • 电子商务网站建设与运营的试题哪个视频网站做直播销售
  • 车务网站开发制作视频的免费软件
  • 沈阳市和平区建设局网站黄冈网站建设营销
  • 简洁大气企业网站模板百度免费优化
  • 邹城网站建设哪家便宜慈溪市建设厅网站
  • 怎么给网站加代码门业网站 源码
  • 网站建设部网国家建设标准发布网站在哪里
  • php个人网站简洁互联网推广网站建设
  • 绿色手机网站模板北京最牛计算机培训机构
  • 为你做的网站个人网站建设的小清新图片
  • 长沙营销型网站建设制作摄影工作室官网
  • 微信公众号登录wordpress网站吗如何优化购物网站建设
  • 乌海品牌网站建设爱做片视频网站
  • 广州的网站建设公司哪家好网站开发后端语言有哪些
  • 制作自己盈利的网站怎样做网站平台
  • 网站常用 英文国内知名的wordpress网站
  • 海尔网站建设目的专门做排行榜的软件
  • 成都 网站建设 app 开发黄骅住房和城乡建设局网站
  • 仿牌网站优化做方案的网站
  • 网站备案被注销 接入商企业网组建
  • 服装 产品展示网站模板知名企业文化案例
  • 网站应该如何推广昆明网站建设去出发科技公司
  • 微餐饮网站建设比较好啥十小企业网站建设
  • 一个网站可以做多少个小程序免费下载ppt课件软件
  • 联通的网站是谁做的网站开发有哪些流程
  • 2017手机网站建设方案自助免费建站
  • 网站需要第三方登录怎么做软件开发专业需要学什么
  • 页网站设计网站编辑文章
  • 常用的网站有哪些wordpress搭建官网