【问题标题】:Unusual LD warning when compiling for ARM为 ARM 编译时出现异常的 LD 警告
【发布时间】:2013-01-11 01:41:50
【问题描述】:

我已尝试通过 MacPorts 安装“arm-none-eabi-gcc”和“arm-elf-gcc”,但每次编译时都会收到此警告。

ld: warning: cannot find entry symbol _start; defaulting to 0000000000008000

我正在使用“-T”标志并指定我自己的链接器文件,如下所示。

SECTIONS {

    . = 0x00000000;

    .text : { * (vectors);  * (.text); }

    .rodata : { * (.rodata); }

    text_end = .;

    . = 0xA4000000;

    .data : AT (text_end) { * (.data); }

    .bss : { * (.bss); }

}

NM 转储这个。

00000000 t reset
00000004 t undefined
00000008 t swi
0000000c t prefetch_abort
00000010 t data_abort
00000014 t reserved
00000018 t interrupt_request
0000001c t fiq
00000020 t irq
00000024 T init
00000038 T main
0000004c A text_end
00008024 t entry
0000804c T __data_start
00010028 A __bss_end__
00010028 A __bss_start
00010028 A __bss_start__
00010028 A __end__
00010028 A _bss_end__
00010028 A _edata
00010028 A _end
00080000 N _stack

【问题讨论】:

  • 您是否传递了-e 标志?或者您是否真的想要链接 C 运行时对象?如果您直接运行 ld 而不是通过编译器驱动程序,您可能需要自己包含它们。
  • -w -nostdlib -nodefaultlibs -fpic -g -O0 -ffreestanding 是我当前的 C 标志。
  • 在这种情况下,我的意思是链接器标志。你需要-e 来提供一个入口点,除非你想要默认的 (_start)。
  • --strip-debug --discard-locals --no-keep-memory --entry=0x00000000 -T entry.ld 用于链接器。还是没有运气。

标签: gcc arm macports ld


【解决方案1】:

链接器向您发出警告,因为它无法在编译后的代码中找到_start 符号。并且您当前的链接器配置期望在代码中的某处定义这样的符号。

因此,您可以通过查阅编译器/链接器用户手册并了解-e 链接器标志的用法来手动定义您的入口点(即重置),或者在您的某些代码中真正定义一个名为_start 的符号.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-10-10
    • 2020-03-05
    • 2013-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多