每个编译器都有默认的-march选项,其值一般都随主流芯片走。转自https://blog.csdn.net/huipengzhao/article/details/6724730?utm_source=blogxgwz0
比如老一点的arm交叉编译器,默认的选项可能是-march=armv4t,新一点的则可能是-march=armv6等等。
用老编译器编出来的二进制文件,只要没使用特殊指令集,大多数可以跑在新片子上,因为arm的向下兼容。
但是用新编译器默认选项编出来的二进制可执行文件,基本上无法在老的平台上跑,因为新架构可能会引入一些新指令。
例如个人在交叉编译树莓派4B时候没有添加
-march=armv7-a
导致了tan,pow等函数没有报错却无法使用,返回值是0,猜测是由于使用的硬浮点计算?