【问题标题】:Override GCC linker symbols in c code using weak declaration使用弱声明覆盖 c 代码中的 GCC 链接器符号
【发布时间】:2018-11-23 06:56:55
【问题描述】:

我正在建造一个精灵目标。我有一个链接器脚本,我在其中输入了一些符号位置,例如(这些符号定义在不同的位置,例如 ROM,其地址在下面提供),

A = 0x12345678;
B = 0x1234567c;
D = 0x1234568c;

在 C 代码中,我可以使用这些变量 A 和 B 而无需声明它们是预期的。 我想知道我是否可以覆盖符号 D,即我当前的可执行文件可以有自己的 D 声明。在这种情况下,链接器应该忽略 D。有没有办法将链接脚本中的符号声明为“弱”?这样链接器只有在没有在任何链接对象中声明时才能使用“输入符号”。

【问题讨论】:

    标签: gcc linker


    【解决方案1】:

    使用PROVIDE 指令

    PROVIDE(D = 0x1234568c);
    

    来自lddocumentation

    在某些情况下,链接描述文件希望仅在符号被引用且未由链接中包含的任何对象定义时才定义符号。 … 另一方面,如果程序定义了……链接器将默默地使用程序中的定义。

    【讨论】:

    • 太棒了!正是我想要的!
    猜你喜欢
    • 2012-10-16
    • 2016-08-27
    • 2014-05-29
    • 1970-01-01
    • 2017-04-06
    • 2018-03-10
    • 2016-06-23
    • 1970-01-01
    相关资源
    最近更新 更多