Как узнать, какие числа с плавающей запятой использует libc?

Я использую систему redhawk 6.5.8 с GNU GCC 4.9.2. Я загрузил исходный код и скомпилировал GCC для платформы как собственный компилятор.

Теперь мне нужно начать компилировать приложение, но, как вы знаете, плавающая точка, используемая в моих приложениях, должна быть совместима с версией libc, которую я использую.

Как я могу узнать, была ли библиотека libc в моей системе (libc.so.6) построена с использованием soft-float и hard-float?

Я пробовал много команд, таких как ldd, objdump, readelf, и все еще не понял.

Большое спасибо


person temax    schedule 16.12.2016    source источник
comment
Разве компоновщик не должен предупреждать вас, когда вы используете несовместимые числа с плавающей запятой? См. Этот вопрос: stackoverflow.com/questions/3321468/   -  person Oleg Andriyanov    schedule 17.12.2016
comment
Да, но, к сожалению, это не совсем ответ на мой вопрос. Независимо от этого, я хотел бы знать способ узнать, как была скомпилирована libc, будь то soft-float или hard-float. Спасибо!   -  person temax    schedule 17.12.2016
comment
gcc -v покажет используемые параметры fpu. По умолчанию libc обычно компилируется с использованием тех же параметров fpu.   -  person sunil    schedule 17.07.2018


Ответы (1)


Если у вас есть доступный readelf двоичный файл, вы можете следовать инструкциям здесь [1] следующим образом:

readelf -a /lib/libm.so.6 | grep FP

Флаг ссылки Tag_ABI_HardFP_use будет хорошей подсказкой для поиска, но могут быть и другие флаги, о которых я не знаю. Этот мне подходит.

[1] https://www.cnx-software.com/2013/04/22/how-to-detect-if-an-arm-elf-binary-is-hard-float-armhf-or-soft-float-armel/

person Jonah    schedule 22.03.2019