这里有两个问题:
将共享库移植到许多Linux-or-Android-on-ARM系统时,最好知道GCC交叉编译器支持的确切EABI版本以及默认的EABI版本。怎么做?
如何调查哪个EABI有目标Linux或Android系统?我通常从目标板上取出任何系统库并调用$ARM-GCC-PREFIX-readelf -h $LIBNAME | grep Flags
,它返回给我smth。比如Version4 EABI
。但是有没有漂亮的方法,所以我不需要将系统库从目标复制到主机来运行readelf
?
答案 0 :(得分:1)
在我看来,你已经找到了识别文件ABI的真正方法。我不知道比readelf
更好的方式。
同样,readelf
可能是确定编译器使用的默认ABI的最佳方法。
编译器实际上不允许您选择任何特定的ABI版本。它只允许您在各种ABI变体之间进行选择。编译器只是在编写时实现当前的ABI。无论如何,EABI应该是向后兼容的。
也许真正的问题是支持哪种架构?或者什么浮动abi?构建特定设备时, 非常重要。