【问题标题】:G++ ARM cross compiling: undefined referencesG++ ARM 交叉编译:未定义的引用
【发布时间】:2016-02-14 18:17:43
【问题描述】:

我正在尝试使用 arm-none-eabi-g++ 编译 Jasmine OpenSSD 代码。 但是,它首先失败并显示以下错误消息

/usr/lib/gcc/arm-none-eabi/4.8.2/../../../arm-none-eabi/bin/ld: cannot find -lstdc++

为了解决这个问题,我确保可以与 libstdc++.a 链接。一旦我修复了它,它就会失败并出现以下错误:

/usr/lib/gcc/arm-none-eabi/4.8.2//libgcc.a(unwind-arm.o): In function `get_eit_entry':
/build/buildd/gcc-arm-none-eabi-6/build/arm-none-eabi/libgcc/../../../gcc-4.8.2/libgcc/unwind-arm-common.inc:221: undefined reference to `__exidx_end'
/build/buildd/gcc-arm-none-eabi-6/build/arm-none-eabi/libgcc/../../../gcc-4.8.2/libgcc/unwind-arm-common.inc:221: undefined reference to `__exidx_start'
/usr/lib/gcc/arm-none-eabi/4.8.2/../../../arm-none-eabi/lib/libc.a(lib_a-abort.o): In function `abort':
/build/buildd/newlib-2.1.0/build/arm-none-eabi/newlib/libc/stdlib/../../../../../newlib/libc/stdlib/abort.c:63: undefined reference to `_exit'
/usr/lib/gcc/arm-none-eabi/4.8.2/../../../arm-none-eabi/lib/libc.a(lib_a-signalr.o): In function `_kill_r':
/build/buildd/newlib-2.1.0/build/arm-none-eabi/newlib/libc/reent/../../../../../newlib/libc/reent/signalr.c:61: undefined reference to `_kill'
/usr/lib/gcc/arm-none-eabi/4.8.2/../../../arm-none-eabi/lib/libc.a(lib_a-signalr.o): In function `_getpid_r':
/build/buildd/newlib-2.1.0/build/arm-none-eabi/newlib/libc/reent/../../../../../newlib/libc/reent/signalr.c:96: undefined reference to `_getpid'
/usr/lib/gcc/arm-none-eabi/4.8.2/../../../arm-none-eabi/lib/libc.a(lib_a-sbrkr.o): In function `_sbrk_r':
/build/buildd/newlib-2.1.0/build/arm-none-eabi/newlib/libc/reent/../../../../../newlib/libc/reent/sbrkr.c:58: undefined reference to `_sbrk'
collect2: error: ld returned 1 exit status
make: *** [firmware.elf] Error 1

这是失败的实际步骤:

arm-none-eabi-g++ -static -nostartfiles -ffreestanding -T ld_script -Wl,-O1,-Map=list.txt  ftl.o sata_identify.o sata_cmd.o sata_isr.o sata_main.o sata_table.o initialize.o mem_util.o flash.o flash_wrapper.o misc.o uart.o init.o -o firmware.elf -L"/usr/lib/gcc/arm-none-eabi/4.8.2/" -lgcc

有人可以提出解决办法吗?此外,如果我使用 arm-none-eabi-gcc 而不是 arm-none-eabi-g++,这将非常有效

【问题讨论】:

  • 粗略猜测-fno-exceptions?
  • 谢谢@MatsPetersson!那确实抑制了这些错误!非常感谢。 -fno-exceptions 是做什么的?我在网上找不到任何东西。

标签: c++ gcc arm cross-compiling


【解决方案1】:

您的问题是由编译器生成的异常处理代码引起的,该代码依赖于运行时组件 - 这些组件在您的构建中不存在。

-fno-exceptions 在编译器的代码生成中关闭异常处理。

【讨论】:

  • 谢谢垫子!另外,这会有任何运行时副作用吗?我计划在 ARM7TDMI 控制器上运行代码。
  • 不要试图抛出异常 - 会发生一些不好的事情,我不太确定是什么(但希望所有代码都是用这个标志编译的,我很确定它会给出一个错误如果你尝试)
猜你喜欢
  • 2014-03-14
  • 1970-01-01
  • 1970-01-01
  • 2014-06-13
  • 1970-01-01
  • 2016-05-26
  • 2013-01-19
  • 2021-02-17
  • 2016-03-25
相关资源
最近更新 更多