使用弱声明覆盖C代码中的GCC链接器符号

时间:2018-11-23 06:56:56

标签: gcc linker

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

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

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

1 个答案:

答案 0 :(得分:0)

使用PROVIDE指令

PROVIDE(D = 0x1234568c);

来自ld documentation

  

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