本博文針對arm-linux-gcc4.3.2版本的交叉編譯工具出現的常見錯誤,進行了整理,總結。
開發環境: ARM9 (JZ2440開發板)
開放平臺: Ubuntu14.04
交叉編譯工具: arm-linux-gcc4.3.2
一. 解決 uboot1.1.6在arm-linux-gcc-4.3.2版本下編譯錯誤問題
編譯錯誤如下圖:
解決方案:
1.修改Makefile文件中的PLATFORM_LIBS
將 PLATFORM_LIBS += -L $(shell dirname
) -lgcc
修改成:
PLATFORM_LIBS += -L $(shell dirname
) -lgcc -lc -L /usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/armv4t/usr/lib
2.修改 cpu /arm920t/config.mk 文件
將: PLATFORM_CPPFLAGS +=$(call cc-option,-mapcs-32,-mabi=apcs-gnu)
PLATFORM_RELFLAGS +=$(call cc-option,-mshort-load-bytes,$(call cc-option,-malignment-traps,))
修改成:
PLATFORM_CPPFLAGS +=$(call cc-option,)
PLATFORM_RELFLAGS +=$(call cc-option,$(call cc-option,))
然後
make 100ask24x0_config
make
就可以編譯通過啦~!
二. 解決在編譯linux時無法生成uImage文件
解決方法: 沒有安裝mkimage安裝包
sudo apt-get install mkimage
三.移植Busybox時注意的問題
1.選擇arm-linux- 交叉編譯工具
2.啓動內核時卡在 Freeing init memory: 140K
解決方法: 在編譯linux時make menuconig 選擇 內核加上EABI 和OABI的支持
Kernel Features —>
[*] Use the ARM EABI to compile the kernel
[*] Allow old ABI binaries to run with this kernel (EXPERIMENTA
3.Illegal instruction 的解決方法
把/usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/armv4t/lib目錄(也就是你的編譯器的庫目錄)下
的所有文件拷貝到目標板子的根目錄的lib目錄下就好了。
這樣無論你的hello是動態編譯還是靜態編譯,跑起來都不會有Illegal instruction的問題。
4.執行qt的可執行文件時出現錯誤沒有libstdc++庫
解決方法: 在/usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/usr/lib中複製文件 : libstdc++.so libstdc++.so.6.0.10 libstdc++.so.6 到開發板的lib目錄下面。