代码之家  ›  专栏  ›  技术社区  ›  Jip Helsen

在c中导入链接器地址

  •  1
  • Jip Helsen  · 技术社区  · 7 月前

    我想使用main.c中linker.ld文件中名为_end的地址。 我知道这个地址至少是0x80000000。但是,当像这样导入extern-char_end时;在main.c中打印出来,我只得到17分。 linker.ld文件是这样的:

    SECTIONS {
        . = 0x80000000; 
    
    /*some more code and sections (doesnt matter)*/
    
        _end = .;
    }
    

    有人知道为什么会发生这种情况,或者我应该如何导入_end吗? Thx提前,jip。

    1 回复  |  直到 7 月前
        1
  •  3
  •   0___________    7 月前

    它只是一个象征。你只能得到它的参考。你不“导入它”

    extern char _end;
    
    void foo(void)
    {
         printf("%u", (unsigned)&_end);
    }
    

    extern char _end[];
    
    void foo(void)
    {
         printf("%u", (unsigned)_end);
    }
    

    对于那些会抱怨格式和转换的人。很可能是STM32,该MCU的纳米库不支持 %zu %p sizeof(int) == sizeof(char *)