Linker Script 链接器脚本(2)
来源:互联网 发布:南方数据传输软件 编辑:程序博客网 时间:2024/05/16 10:06
5 为符号指定值
在脚本中,可以为一个符号symbol指定一个值。这样会把符号定义为全局符号symbol。
5.1 Simple Assignments
5.2 PROVIDE
5.1 简单赋值
使用任何的C赋值操作来给一个符号赋值。像下面这样:
symbol = expression ;
symbol += expression ;
symbol -= expression ;
symbol *= expression ;
symbol /= expression ;
symbol <<= expression ;
symbol >>= expression ;
symbol &= expression ;
symbol |= expression ;
第一个例子中,定义了一个符号symbol,并赋值为expression。其他的例子中,symbol必须已被定义,根据操作调整其值。
特殊的符号名"."指示的是位置计数器location counter。你只有在SECTIONS命令中才可以使用。
表达式后的";"是必须的。你可以像命令一样按它们的顺序写符号赋值,或者在SECTIONS命令中像一个语句一样。或者作为SECTIONS命令中输出节描述器的一部分。
例子:
floating_point = 0;
SECTIONS
{
.text :
{
*(.text)
_etext = .;
}
_bdata = (. + 3) & ~ 3;
.data : { *(.data) }
}
在例子中,符号`floating_point`会被定义为0。符号_etext会被定义为最近的输入节.text地址。符号_bdata定义为接着.text输出节的地址,但对齐到了4自己的边界。
5.2 PROVIDE
在一些情况下,链接器脚本想要定义一个符号,这个符号仅仅被引用但没有被任何链接器中包含的对象定义。例如,传统的链接器定义符号"etext"作为一个函数名,而不会遇到错误。PROVIDE关键字可以用来定义像这样的符号,仅仅在它被引用却没有定义时。语法是:PROVIDE(symbol=expression)。
下面是使用PROVIDE定义"etext"的例子:
SECTIONS
{
.text :
{
*(.text)
_etext = .;
PROVIDE(etext = .);
}
}
在例子中,如果程序定义了"_etext"(有下划线),链接器会给出多个定义的错误。另一方面,如果程序定义"etext"(没有下划线),链接器会在程序中静静地使用这个定义。如果程序引用"etext"但没有定义它,链接器会使用脚本中的定义。
- Linker Script 链接器脚本(2)
- Linker script 链接器脚本(1)
- Linker script 链接器脚本
- [LinkerScript.2] 链接器脚本格式 - Linker Script Format
- 转:链接器脚本(linker script)
- Linker script in Linux(什么是链接脚本 )
- [随笔]GNU linker script,ld script,GNU链接脚本
- [LinkerScript.1] 基本的链接器脚本概念 - Basic Linker Script Concepts
- [LinkerScript.3] 简单的链接器脚本实例 - Simple Linker Script Example
- [LinkerScript.4] 简单的链接器脚本命令: 入口 - Simple Linker Script Commands: Entry Point
- [LinkerScript.5] 简单的链接器脚本命令: 文件命令 - Simple Linker Script Commands: File Commands
- [LinkerScript.6] 简单的链接器脚本命令: 格式命令 - Simple Linker Script Commands: Format Command
- [LinkerScript.7] 简单的链接器脚本命令: 区域别名 - Simple Linker Script Commands : Region Alias
- [LinkerScript.8] 简单的链接器脚本命令: 杂项命令 - Simple Linker Script Commands : Miscellaneous Commands
- 连接脚本(Linker Script)
- 链接器(Linker)
- 连接脚本(linker script)介绍
- 连接脚本(linker script)介绍
- jsp+tomcat+mysql & sevlet & javabean 配置全过程
- Visual Studio .NET 已检测到指定的 Web 服务器运行的不是 ASP.NET 1.1 版
- 用Struts上传多个文件的方法
- 改善DataGrid的默認分頁使其更友好
- Linker script 链接器脚本(1)
- Linker Script 链接器脚本(2)
- 戒游戏一个月
- 利用mediaplayer打造自己的mp3播放器
- 提交窗体后滚动条位置保持不变
- 实现文本自动分类的基础----Term频率计算方法
- two tips about BlackBerry
- [C#]解决读写包含汉字的txt文件时乱码的问题
- 励志铭言
- 高级程序员与初级程序员的区别是什么?