交叉编译器的版本兼容

问题1、arm交叉编译器各版本的兼容性,如使用3.4.5编译的动态链接库,可否用4.4编译应用程序,并成功调用动态库?

问题2:拿到一个陌生的arm版,如何从arm板上获取编译器版本,(原PC端开发信息丢失)?


问题一,最好配套使用,否则会出现莫名其妙的问题
问题二,陌生的arm板,找它的厂家要编译器,厂家提供的编译器都是经过验证的,如果自己学习就无所谓了,可以自己做一个
我们首先要弄清楚指令集的概念,
JZ2440使用arm9核,该CPU核使用的指令集是armv4;
所谓指令集,指的是汇编指令的版本;比如cortex a7等更先进的CPU核它支持某些新的指令,而ARM9不支持这些指令。

你使用比较新的编译器时,它默认支持的指令集一般就不是armv4了;
如果不进行特别指定,编译出来的BIN文件烧在JZ2440上是无法运行的:因为CPU不认得某些新指令,无法执行某些新指令。

一般来说,新的编译器会兼容老的芯片,但是需要告诉编译器,让它使用老的指令集来编译程序。
所以,你当然可以使用4.4的工具链来编译jz2440程序,需要做的是:指定它,使用armv4指令集。
方法如下:
使用3.4.5工具链时,我们这样编译:arm-linux-gcc -c -o led.o led.c    // 默认使用armv4
使用4.4等工具链时,这样编译:arm-linux-gcc -march=armv4  -c -o led.o led.c    // 默认不是armv4,需要手工指定

问题2:
相信你已经知道答案了,
首先要确定你的CPU核使用哪些指令集,
是否支持软件浮点,
你想使用glibc还是uclibc,
然后根据这些特性去找对应的编译器。


uclibc是glibc的简化版本,不过现在嵌入式的存储空间足够大了,基本不使用uclibc了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值