问题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了 |