链接脚本详解:Rockchip RK3399Pro datasheet V1.1
需积分: 45 120 浏览量
更新于2024-08-06
收藏 534KB PDF 举报
本文档详细介绍了在Linux系统中使用GCC链接器进行链接操作时的一些关键命令和概念,特别是关于链接脚本(linkerscript)的使用。这些脚本用于控制输入文件如何组合成输出文件,并定义输出文件在程序地址空间内的布局。链接脚本涉及到的命令包括设置入口点(ENTRY)、包含其他链接脚本(INCLUDE)、指定输入文件(INPUT)、处理库文件(GROUP)、定义输出文件名(OUTPUT)、设置搜索路径(SEARCH_DIR)、定义文件格式(OUTPUT_FORMAT和TARGET)以及处理符号定义(EXTERN和FORCE_COMMON_ALLOCATION)等。
一、链接脚本基础
链接脚本是链接器工作的蓝图,定义了输入文件如何映射到输出文件,以及输出文件的结构。默认的内置链接脚本可以通过`ld --verbose`查看,而`-T`选项允许用户自定义链接脚本。链接脚本可以包含各种命令,如增加自定义行为。
二、链接脚本命令详解
1. **ENTRY(SYMBOL)**: 用于设置进程执行的入口地址,即第一条用户空间指令的地址。如果未明确指定,ld会按顺序尝试从命令行选项`-e`、链接脚本的`ENTRY`命令、`start`符号、`.text`段的起始位置或默认值0来确定入口点。
2. **INCLUDE**: 类似于C语言的`#include`,用于包含其他链接脚本。搜索路径由`-L`选项指定,最大深度为10。
3. **INPUT(files)**: 指定链接过程的输入文件,可以是目标文件或库文件,ld会按照指定的顺序查找和处理这些文件。
4. **GROUP(files)**: 用于处理需要重复搜索符号定义的多个输入文件,尤其适用于库文件,确保所有未定义的引用都被解析。
5. **OUTPUT(FILENAME)**: 定义输出文件的名称,可以覆盖`-o`选项,但`-o`优先级更高。
6. **SEARCH_DIR(PATH)**: 添加额外的搜索路径供ld查找输入文件,`-L`指定的路径优先级更高。
7. **STARTUP(filename)**: 设置第一个处理的输入文件。
8. **OUTPUT_FORMAT** 和 **TARGET**: 分别用于设置输出和输入文件的BFD格式,支持不同的字节序和格式。
9. **ASSERT(EXPR, MESSAGE)**: 如果表达式`EXPR`不成立,链接过程将终止。
10. **EXTERN(SYMBOL)**: 在输出文件中添加未定义的符号,类似`-u`选项。
11. **FORCE_COMMON_ALLOCATION**: 强制为通用符号(common symbols)分配空间,即使使用了`-r`选项。
三、链接概念
1. 输入文件可能是目标文件或链接脚本文件,输出文件是合并后的目标文件或可执行文件。
2. 目标文件的section包含名字、大小和可能的数据,分为可加载和可分配两类。
3. VMA和LMA表示section在内存中的位置,通常两者相等,但在某些情况下可能不同。
四、链接器操作
链接器的作用是合并输入文件,解决符号引用,分配内存,最终生成可执行文件。默认链接脚本可以被自定义脚本替换,以满足特定的链接需求。通过理解和利用这些链接脚本命令,开发者可以精确地控制程序的构建过程,从而优化性能或满足特定的系统要求。
2021-09-30 上传
2020-09-06 上传
2020-03-10 上传
2020-07-25 上传
2021-07-07 上传
2020-07-25 上传
2020-07-25 上传
2023-07-21 上传
2023-07-23 上传
2023-07-23 上传
七231fsda月
- 粉丝: 31
- 资源: 3966
最新资源
- MATLAB实现小波阈值去噪:Visushrink硬软算法对比
- 易语言实现画板图像缩放功能教程
- 大模型推荐系统: 优化算法与模型压缩技术
- Stancy: 静态文件驱动的简单RESTful API与前端框架集成
- 掌握Java全文搜索:深入Apache Lucene开源系统
- 19计应19田超的Python7-1试题整理
- 易语言实现多线程网络时间同步源码解析
- 人工智能大模型学习与实践指南
- 掌握Markdown:从基础到高级技巧解析
- JS-PizzaStore: JS应用程序模拟披萨递送服务
- CAMV开源XML编辑器:编辑、验证、设计及架构工具集
- 医学免疫学情景化自动生成考题系统
- 易语言实现多语言界面编程教程
- MATLAB实现16种回归算法在数据挖掘中的应用
- ***内容构建指南:深入HTML与LaTeX
- Python实现维基百科“历史上的今天”数据抓取教程