符号及符号表
符号的定义和引用
链接符号的类型
链接符号类型举例
目标文件中的符号表
符号表信息举例
符号解析(Symbol Resolution)
全局符号的强、弱
链接器对符号的解析规则
多重定义符号的处理规则 Rule 1: 强符号不能多次定义 – 强符号只能被定义一次,否则链接错误 Rule 2: 若一个符号被定义为一次强符号和多次弱符号,则 按强定义为准 – 对弱符号的引用被解析为其强定义符号 Rule 3: 若有多个弱符号定义,则任选其中一个 – 使用命令 gcc –fno-common链接时,会告诉链接器在 遇到多个弱定义的全局符号时输出一条警告信息。 符号解析时只能有一个确定的定义(即每个符号仅占一处存储空间)
多重定义符号的解析举例
多重定义全局符号的问题
尽量避免使用全局变量
• 一定需要用的话,就按以下规则使用
– 尽量使用本地变量(static)
– 全局变量要赋初值
– 外部全局变量要使用extern
多重定义全局变量会造成一些意想不到的错误,而且是默默发生的,编译系统不会警告,并会在程序执行很久后才能表现出来
,且远离错误引发处。特别是在一个具有几百个模块的大型软件中,这类错误很难修正。
大部分程序员并不了解链接器如何工作,因而养成良好的编程习惯是非常重要的。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人