利用gcc -E -P 进行宏替换 宏展开 预处理文件

本文介绍了如何使用gcc的-E选项和-P参数来展开链接脚本link.ld中引用的宏定义,例如从memory.h头文件中导入的内存地址宏。通过这个过程,可以将链接脚本中的宏替换为具体的数值,以便正确解析和处理内存布局。此方法在处理非源码文件与源码宏定义相互依赖的情况时非常有用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

背景:

        有的时候,非源码中的文件,需要使用到源码头文件中的一些宏,如连接脚本(link.ld)中,会用到源码中定义分配的内存地址宏,此时就可以用 gcc -E -P 命令对link.ld中的宏进行替换,否则无法识别宏。

待展开文件:link.ld

#include “memory.h"

SECTIONS
{
     . = MEM_TEXT_BASE;
     .text : {
        *(.text)
     }

     . = MEM_DATA_BASE;
     .data ALIGN(4) : {
        *(.data) 
    }
     .bss ALIGN(4) : {
        *(.bss) 
    }
}

头文件:memory.h

#define MEM_BASE        0x800000000

#define MEM_TEXT_BASE   MEM_BASE
#define MEM_TEXT_SIZE   0x10000

#define MEM_DATA_BASE   (MEM_TEXT_BASE + MEM_TEXT_SIZE)
#define MEM_DATA_SIZE   0x20000

通过命令 gcc -E -P -<link.ld> link_out.ld

展开后文件:link_out.ld

SECTIONS
{
     . = 0x80000000;
     .text : {
        *(.text)
     }

     . = (0x80000000 + 0x10000);
     .data ALIGN(4) : {
        *(.data) 
    }
     .bss ALIGN(4) : {
        *(.bss) 
    }
}

其中,-P 可以删除无用的信息

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

洲游

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值