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