我有一个HardFP ABI (非常)简单的测试程序。它与其他HardFP二进制文件链接,没有任何问题。现在我想在代码中使用来自Softfp库的一个函数,所以我从这个库中更改了头文件(.h),以便在每个使用双arg (比如: void ( double,double arg2))的函数上添加attibute:__ attribute__((pc(“aapcs”),所以我告诉工具链这个库使用softfp。问题是工具链(arm androideabi-4.9)对我大喊大叫:
/media/data_disk/b2g/work/hardfp/arm-linux-androideabi-4.9/bin/../lib/gcc/arm-linux-androideabi/4.9.x-google/../../../../arm-linux-androideabi/bin/ld:错误: /tmp/cc6SmP3D.o使用VFP寄存器参数,输出不存在/media/data_disk/b2g/work/hardfp/arm-linux-androideabi-4.9/bin/../lib/gcc/arm-linux-androideabi/4.9.x-google/../../../../arm-linux-androideabi/bin/ld:错误: /home/jgomez/b2g/build.flatfish.hardfp/out/target/product/flatfish/obj/lib/libc.so使用VFP寄存器参数,输出不存在/media/data_disk/b2g/work/hardfp/arm-linux-androideabi-4.9/bin/../lib/gcc/arm-linux-androideabi/4.9.x-google/../../../../arm-linux-androideabi/bin/ld:错误: /home/jgomez/b2g/build.flatfish.hardfp/out/target/product/flatfish/obj/lib/libstdc++.so使用VFP寄存器参数,输出不存在/media/data_disk/b2g/work/hardfp/arm-linux-androideabi-4.9/bin/../lib/gcc/arm-linux-androideabi/4.9.x-google/../../../../arm-linux-androideabi/bin/ld:错误: /home/jgomez/b2g/build.flatfish.hardfp/out/target/product/flatfish/obj/lib/libm.so使用VFP寄存器参数,输出不使用
(当然,libc、libstdc++和libm也很难实现)。
它不编译。
因此,我的问题是,如何使用__attribute__((pcs(“aapcs”))让HardFP ABI程序与Softfp二进制文件链接?
我以为这就是这面旗帜的目的。我说错了吗?
谢谢!!
发布于 2015-08-10 18:18:31
好吧,我已经解决了问题。
正如我所想的,该属性的工作方式与预期的一样。编译器(gcc)生成的汇编代码如果我在函数声明前面写前缀:__attribute__((pcs("aapcs"))),就是使用r寄存器传递参数值,所以被调用者在Softfp模式下工作得很好。
我只需要将此标志添加到编译器选项中:
--no-warn-mismatch
https://stackoverflow.com/questions/28932005
复制相似问题