Gcc 我可以使用objcopy将一个库从一个ARM体系结构转换为另一个吗?

Gcc 我可以使用objcopy将一个库从一个ARM体系结构转换为另一个吗?,gcc,arm,objcopy,eabi,Gcc,Arm,Objcopy,Eabi,我必须使用一个为ARM Cortex M4预编译的库,该库位于一个带有ARM Cortex A8的项目中。链接器自然会给我一个错误: 文件“…”的Tag_CPU_arch_profile属性值为“77”,与之前看到的(“65”)不同;组合不兼容的文件 我可以使用arm ONE eabi objcopy转换库吗?它不包含特定于外围设备或微控制器本身的代码。两人都是手臂。似乎有可能,但如何实现?两者都是ARM,但架构不同(ARMv7-M与ARMv7-A)。生成的二进制文件取决于对体系结构的假设,特别

我必须使用一个为ARM Cortex M4预编译的库,该库位于一个带有ARM Cortex A8的项目中。链接器自然会给我一个错误:

文件“…”的Tag_CPU_arch_profile属性值为“77”,与之前看到的(“65”)不同;组合不兼容的文件


我可以使用arm ONE eabi objcopy转换库吗?它不包含特定于外围设备或微控制器本身的代码。两人都是手臂。似乎有可能,但如何实现?

两者都是ARM,但架构不同(ARMv7-M与ARMv7-A)。生成的二进制文件取决于对体系结构的假设,特别是在编译库时使用“-mcpu=”选项时。虽然它们99%相同,但也存在一些差异。M4有一个thumb div指令,其中cortex-A8不支持该指令。编译器可以根据将在M4上运行的知识(传递给它的标志)生成此代码。一些Cortex-A8包含拇指div,而另一些则不包含。我现在可以指出那是一个地雷。其他的可能存在。您可以创建一个空的A8对象,并使用
objcopy-O binary-j sample thumb.elf sample.bin
后跟
objcopy--add section sample=sample.bin A8.elf
其中sample是每个部分。我想这是用户空间代码?任何系统代码都是完全不可移植的;即使在用户空间中,也有一些指令,如
MRS
,由于架构的不同,可能仍然会爆炸。除了它们的启动方式,您可能可以这样做,一种方法是将对象复制到a-O二进制格式,然后使用一些创造性的对象复制选项,您可以从bin中获得所需的任何arch/target(当然,它支持armv7 thumb/thumb2指令,但从技术上讲,您可以插入任何您想要的内容)@Notlikethat:您提到的是“一些指令”架构之间的差异。我可以在某个地方读一下差异吗?在ARM中,我只找到了对I.e.
MRS
的描述。但我看不到差异。你能解释一下吗?谢谢!