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

链接脚本总结

https://blog.csdn.net/Gagaaaaaa/article/details/140288305

链接脚本介绍

链接脚本的作用:将多个目标文件(.o)和库文件(.a)链接成一个可执行文件(输出文件),并控制输出文件的内存布局(地址分配)。

ENTRY命令

ENTRY(symbol) 设置入口点

MEMORY块

MEMORY为链接器提供系统内存的布局信息,并确定内存区域的访问权限。链接器根据MEMORY的信息,将编译生成的.o目标文件中的代码、数据、符号等分配到不同的内存区域。

MEMORY
{/*标准格式如下*/mem_name [(attr)] : ORIGIN = origin, LENGTH = lenRAM0 (xrw)  : ORIGION = (0x00000000), LENGTH = 2MRAM1 (xrw)  : ORIGION = (0x30000000), LENGTH = 128M
}

SECTIONS块

链接脚本可声明将指定的代码放到对应的memory区域——以下链接脚本代码将.text段存放到标号为RAM的内存区域,将.data段存放到标号为FLASH的内存区域:

SECTIONS
{.text >RAM   /*.text也可以后面再细分*/.data >FLASH
}

‘.’ 表示当前地址,它可以被赋值,也可以赋值给某个变量。

SECTIONS
{	/*标准格式如下*/section-name [address] [(type)] :[AT(lma)][ALIGN(section_align)][SUBALIGN(subsection_align)][constraint]{contentscontents...} [>region] [AT>lma_region] [:phdr :phdr ...] [=fillexp]
}

链接脚本的本质是描述输入和输出的关系。section-name表示输出文件的段,即输出文件中有哪些段,而contents就是描述输出文件的这个段从哪些文件里抽取出来的,即输入文件。

PROVIDE命令

https://blog.csdn.net/weixin_44919664/article/details/146303669

作用: 定义一个’输入文件内被引用但没定义’的符号,相当于在符号表中定义一个全局变量,其他源文件可以操作这个符号来读写对应的内存(这个符号本身不占用内存|地址,链接脚本中的声明一个PROVIDE不会使地址计数器增加)

KEEP命令
保证链接器不优化指定的段(section)

attribute((section(" "))

将函数或变量放到指定的段里,然后可以在链接脚本内指定这个段的地址。

/* C file start */ 
Void MyFunction(void__attribute__((section(".text.myfunci")));
Void MyFunction(void{//implement
}/* C file end */ 
#define RTEMS_SECTION( _section ) __attribute__(( __section__( _section ) ))
http://www.dtcms.com/a/390159.html

相关文章:

  • 模电基础:基本放大电路及其优化
  • Curl、Wget 等命令 Uses proxy env variable https_proxy 如何解决
  • 自注意力机制Self-Attention (一)
  • (论文速读)DeNVeR(可变形神经血管表示)-X射线血管造影视频的无监督血管分割
  • css实现3D变化之两面翻转的盒子效果
  • 多项式回归原理与实战:从线性扩展到非线性建模
  • 【层面二】.NET 运行时与内存管理-01(CLR/内存管理)
  • 【51单片机】【protues仿真】基于51单片机温度检测数码管系统
  • Sketch安装图文教程:从下载到账号注册完整流程
  • Day07_STM32 单片机 - 中断
  • 花瓶测试用例10条(基于质量模型)
  • C++ 之 【智能指针的简介】
  • Vue3 + xgplayer 实现多功能视频播放器:支持播放列表、自动连播与弹幕
  • 牛客算法基础noob46 约瑟夫环
  • TCP协议的详解
  • 【LeetCode】大厂面试算法真题回忆(136)——环中最长子串
  • Hystrix:熔断器
  • SQLark 实战 | 数据筛选与排序
  • 达梦Qt接口源码Qt6编译错误处理记录
  • 知识付费创作者:如何避免陷入跟风做内容的陷阱?
  • @once_differentiable 自定义算子的用处
  • 分子动力学--蛋白配体模拟
  • python第二节 基础语法及使用规范详解
  • 运维安全07 - JumpServer(堡垒机)介绍以及使用
  • 同一个电脑内两个进程间如何通信的几种方式
  • 《FastAPI零基础入门与进阶实战》第20篇:消息管理-封装
  • Pyside6 + QML - 信号与槽04 - Python 主动发射信号驱动 QML UI
  • 【系列文章】Linux系统中断的应用06-中断线程化
  • ruoyi-vue(十五)——布局设置,导航栏,侧边栏,顶部栏
  • 第13章 线程池配置