解决__aeabi_unwind_cpp_*问题
时间:2010-12-02 来源:ruizhe
注:又在CodeSourcery上发现原来arm-none-eabi-xxx和arm-none-linux-gnueabi-xxx原来不一样啊,用arm-none-eabi-xxx编译裸程序的话不用加参数也可以正常通过,参考:http://www.codesourcery.com/archives/arm-gnu/msg02478.html
用带有eabi的arm-linux-gcc编译祼程序的时候经常会出错,像我的4.4.1中编译出错如下:
led_on_c.o:(.ARM.exidx+0×0): undefined reference to `__aeabi_unwind_cpp_pr0′
在arm-linux-gcc的选项中加入:
-fno-exceptions
-fno-unwind-tables
-fno-asynchronous-unwind-tables
4.4.1说不认识-fno-exceptions选项,去掉这个选项只加后两个就可以编译通过。
原文:http://www.codesourcery.com/archives/arm-gnu/msg03196.html
原文中涉及到的“Exception Handling ABI for ARM architecture“也本地一份[下载]
grep 了一下linux源码发现在arch/arm/Makefile的83~91行有这么一段(我的是2.6.30.4):
ifeq ($(CONFIG_AEABI),y)
CFLAGS_ABI:=-mabi=aapcs-linux -mno-thumb-interwork
else
CFLAGS_ABI:=$(call cc-option,-mapcs-32,-mabi=apcs-gnu) $(call cc-option,-mno-thumb-interwork,)
endif
ifeq ($(CONFIG_ARM_UNWIND),y)
CFLAGS_ABI+=-funwind-tables
endif