C/C++如何build并链接资源文件

在嵌入式开发或将图片等资源文件编译到可执行文件中的场景下,资源通常会放在专门的段中。具体取决于编译器和链接器的配置,资源文件通常放入以下几个常见的段中:

  1. .rodata 段 用途:只读数据段,通常存放常量和不可修改的数据。 描述:图片资源文件可以以二进制或数据数组的形式存储在只读数据段中。这是最常见的选择,因为资源文件在运行时通常不需要修改。 典型使用:静态图片、图标、只读的配置文件等。 示例:

const unsigned char image_data[] = { /* 图片的二进制数据 */ };

编译器通常会将这些数据放在 .rodata 段中,因为它是只读的。

  1. .data 段 用途:可读写的数据段,存储初始化的全局变量或静态变量。 描述:如果图片资源在程序运行过程中需要修改(例如动态修改图片内容),那么可以将其放入 .data 段。 缺点:与 .rodata 相比,.data 段的内容会在程序运行时占用 RAM,因为它需要从程序的可执行文件中复制到内存中。

  2. 自定义段 用途:有时开发者可能希望创建一个自定义的段来专门存储图片或其他资源,以便更灵活地控制它们的加载和管理。 描述:你可以通过链接脚本创建一个自定义段(例如 .imgdata)来存储这些资源文件。 示例(自定义段的链接脚本):

SECTIONS { .imgdata : { *(.imgdata) } } 

然后在代码中,使用特定的指令将数据放入该段:

const unsigned char image_data[] attribute((section(".imgdata"))) = { /* 图片数据 */ };
  1. .bss 段 用途:未初始化数据段,存储未初始化的全局或静态变量。 描述:一般不适

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值