错误" __ aeabi_unwind_cpp_pr0"同时链接WSL上的Arm

时间:2018-02-09 22:18:37

标签: linux gcc ada windows-subsystem-for-linux gnat

大家晚上好,

我正在尝试在Ada中为基于Arm的微控制器编译一个简单的程序。 我在Linux子系统上安装了gnat-5-arm-linux-gnueabi软件包。

现在,使用arm-linux-gnueabi-gcc-5 -mcpu=cortex-m4 -mthumb program.adb进行编译工作正常,但是与arm-linux-gnueabi-ld -T flash.ld -o program.elf program.o的关联会导致错误:

program.o:(.ARM.exidx+0x0): undefined reference to `__aeabi_unwind_cpp_pr0'

我已经查看了现有的解决方案,但它们都没有为我工作。我已经尝试安装gcc-arm-none-eabi包并使用其链接器(相同的错误),以及使用ld(无法识别arm目标)。

我的一个理论是我可能使用错误的GNAT包或二进制文件来编译或链接。因此,如果有人知道在哪里可以找到这些的描述,它也可以帮助我:-)(有很多GNAT包,但只有2个用" arm"在他们的名字中)

编辑:libgcc_eh.a下有一个文件/usr/lib/gcc-cross/arm-linux-gnueabi/5/,其中包含符号"展开&#34 ;;将此文件添加到链接器输入似乎可以解决此错误,但会生成一些新的"未定义的引用"出现:

Incl/libgcc_eh.a(unwind-arm.o): In function 'get_eit_entry':
(.text+0x238): undefined reference to '__exidx_start'
Incl/libgcc_eh.a(unwind-arm.o): In function 'get_eit_entry':
(.text+0x23c): undefined reference to '__exidx_end'
Incl/libgcc_eh.a(unwind-arm.o): In function 'unwind_phase2':
(.text+0x334): undefined reference to 'abort'
Incl/libgcc_eh.a(unwind-arm.o): In function 'unwind_phase2_forced':
(.text+0x424): undefined reference to 'memcpy'
Incl/libgcc_eh.a(unwind-arm.o): In function 'unwind_phase2_forced':
(.text+0x478): undefined reference to 'memcpy'
Incl/libgcc_eh.a(unwind-arm.o): In function '__gnu_Unwind_Resume':
(.text+0x5b8): undefined reference to 'abort'
Incl/libgcc_eh.a(unwind-arm.o): In function '__gnu_Unwind_Resume':
(.text+0x5f4): undefined reference to 'abort'
Incl/libgcc_eh.a(pr-support.o): In function '_Unwind_GetTextRelBase':
(.text+0x4f0): undefined reference to 'abort'

1 个答案:

答案 0 :(得分:3)

编译program.adb时,生成的目标代码将包含对运行时系统的引用(例如,异常支持,文本i / o)。

gnat-5-arm-linux-gnueabi包默认为基于Linux的RTS编译,因此未定义的引用。

你可以通过为你的电路板指定一个合适的RTS(--RTS=/where/ever)来获得这个包 - 如果你有一个!

我认为入门的最佳选择是从AdaCore下载一个编译器套件1。这将带您进入与您的操作系统兼容的主机版本的下载页面;单击右下角的“更多软件包,平台,版本和源代码”链接,然后选择您的平台:“ARM ELF(托管在Linux上)”或“ARM ELF(托管在Windows上)”。

在Linux上,有一个安装自述文件:(a)您可能需要以root身份安装,(b)相关示例位于<installation root>/share/examples/gnat-cross。我记得,led-flasher-stm32f4示例实际上是针对STM32F429I的,它为板载LED提供了不同且更少的引脚分配!见src/lights.ads

您应该在<installation root>/share/doc中找到文档。有关AdaCore IDE的信息,请参阅gps,有关各种组件的信息,请参见gnat,包括Ada参考手册(混淆地称为“ARM”),gnat-cross用于交叉编译问题。