链接脚本详解:Rockchip RK3399Pro datasheet V1.1
需积分: 45 95 浏览量
更新于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在内存中的位置,通常两者相等,但在某些情况下可能不同。
四、链接器操作
链接器的作用是合并输入文件,解决符号引用,分配内存,最终生成可执行文件。默认链接脚本可以被自定义脚本替换,以满足特定的链接需求。通过理解和利用这些链接脚本命令,开发者可以精确地控制程序的构建过程,从而优化性能或满足特定的系统要求。
369 浏览量
724 浏览量
708 浏览量
397 浏览量
110 浏览量
313 浏览量
210 浏览量
199 浏览量
230 浏览量
223 浏览量

七231fsda月
- 粉丝: 31
最新资源
- 网络电视压缩包内容解析
- Verilog实现贪吃蛇游戏的FPGA源码解析
- iOS PanCardView动画拖动效果实现教程
- Eclipse插件spket-1.6.23实现JS和JQuery代码提示功能
- Angular自定义组合框指令及模糊搜索功能介绍
- C#实现Textbox智能提示功能指南
- STM32MP157单通道ADC采集DMA读取HAL库驱动程序
- 将Woz的SWEET16 16位处理器移植至C64的Kick汇编程序
- MATLAB时频分析工具箱TFTB-0.2使用教程
- Netty实例5.0:全面解析IO通信框架及其应用
- 基于51单片机的16按键计算器设计与实现
- iOS开发中MBProgressHUD网络加载视图的应用
- STM32MP157 HAL库驱动PCF8563实时时钟程序教程
- 淘宝卖家不可或缺的钻展教程指南
- librender渲染器: C++实现的单对象渲染技术
- 安卓设备USB驱动安装与更新教程