2013-07-15 65 views
1

我已經將u-boot移植到我的android4.2源代碼並使用android工具鏈, 其中有一個海灣合作委員會版本4.6.x谷歌20120106.(Android4.2)隨機編譯錯誤「無法識別的命令行選項」-mshort-load-bytes'「with arm-eabi-gcc 4.6.x

我的環境構建:Ubuntu 10.04,與主機GCC版本4.4.3。

我的平臺是arm-v7,cotex-a5。

的問題是,有時的u-boot會遇到以下編譯錯誤(我用的是多椎建設機器人):

target thumb C++: libGLES_trace <= frameworks/native/opengl/libs/GLES_trace/src/gltrace_context.cpp 

    CC ispi.c 

target thumb C++: libGLES_trace <= frameworks/native/opengl/libs/GLES_trace/src/gltrace_egl.cpp 

    CC spl.c 

target thumb C++: libGLES_trace <= frameworks/native/opengl/libs/GLES_trace/src/gltrace_eglapi.cpp 

    MAKE arch/arm/lib/ 
    CC timer.c 
cc1: error: unrecognized command line option '-mshort-load-bytes' 

make[2]: *** [/home/jenkins/workspace/droid-4.2.2_r1/out/target/product/aere/obj/u-boot/arch/arm/cpu/armv7/rda/timer.o] Error 1 

make[1]: *** [/home/jenkins/workspace/droid-4.2.2_r1/out/target/product/aere/obj/u-boot/arch/arm/cpu/armv7/rda/librda.o] Error 2 

make[1]: Leaving directory `/home/jenkins/workspace/rdadroid-4.2.2_r1/u-boot' 
make: *** [out/target/product/aere/obj/u-boot/u-boot.img] Error 2 

make: *** Waiting for unfinished jobs.... 

但是,如果我再蓋了,編譯錯誤消失

我知道3.5後GCC不支持-mshort-load-bytes的選擇,但我的gcc版本 是4.6,我查include/generated/cc_options.mk,如果構建失敗,內容是:

CC_OPTIONS += -marm 
CC_OPTIONS += -mno-thumb-interwork 
CC_OPTIONS += -mabi=apcs-gnu 
CC_OPTIONS += -mabi=aapcs-linux 
CC_OPTIONS += -march=armv7-a 
CC_OPTIONS += -fno-stack-protector 
CC_OPTIONS += -Wno-format-nonliteral 
CC_OPTIONS += -Wno-format-security 
CC_OPTIONS += -fstack-usage 
CC_OPTIONS += -fno-toplevel-reorder 
CC_OPTIONS += -mshort-load-bytes 

如果成功,則不存在CC_OPTIONS += -mshort-load-bytes

那麼,任何人都可以告訴我如何調試這個問題? 謝謝!

+0

以下詞語來自android開發者:「Android構建系統的設計目的不是使用遞歸調用來實現,而且在這種情況下的結果會受到競爭條件的限制,因此非常不明確 您可以嘗試-j,你可以嘗試在你的命令行中添加僞目標「showcommands」,但真正的調試可能在你正在遞歸調用的makefile中,而不是在Android構建系統中。 – Yingchun

+0

所以,我構建了android有兩個步驟:make bootloader(u-boot),然後make -j32。但我認爲這只是一個工作,不能解決真正的bug。 – Yingchun

回答

0

-mshort-load-bytes是一箇舊選項,已被GCC 3替換爲-malignment-traps。它只適用於ARMv4之前的ARM架構的舊版本。它通過加載來自未對齊位置的字(4字節)值來告訴GCC不加載short(2字節)值,因爲這會導致對齊陷阱。

參考文獻:gcc 3.0.2gcc 2.95.3 docs。

相關問題