У меня есть (очень) простая тестовая программа HardFP ABI. Он без проблем линкуется с другими исполняемыми файлами HardFP. Теперь я хотел использовать функцию из библиотеки Softfp ABI в своем коде, поэтому я изменил файл заголовка (.h) из этой библиотеки, чтобы добавить атрибут: __ attribute__((pcs("aapcs"))) для каждой функции, которая использует двойные аргументы (например: void doSomething(двойной аргумент, двойной аргумент2)), поэтому я сообщаю цепочке инструментов, что эта библиотека использует softfp ABI. Проблема в том, что набор инструментов (arm-linux-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/o ut/target/product/flatfish/obj/lib/libm.so использует аргументы регистра VFP, вывод не
(Конечно, libc, libstdc++ и libm тоже хардфп).
Он не компилируется.
Итак, мой вопрос: Как __attribute__((pcs("aapcs"))) следует использовать, чтобы позволить программам HardFP ABI связываться с двоичными файлами Softfp ABI?
Я думал, что это и есть цель такого флага. Я ошибся?
Спасибо!!