Когда я компилирую код C со своим перекрестным набором инструментальных средств, компоновщик печатает страницы предупреждений, говоря, что мой исполняемый файл использует трудные плавания, но мой libc использует мягкие плавания.Какая разница?
Жесткие поплавки используют встроенный в чип блок вычислений с плавающей запятой. Мягкие поплавки эмулируют его в программном обеспечении. Разница заключается в скорости. Странно видеть оба варианта на одной и той же целевой архитектуре, поскольку чип либо имеет FPU, либо нет. Вы можете включить мягкую плавающую точку в GCC с помощью -msoft-float. Вы можете перекомпилировать libc для использования аппаратной плавающей точки, если вы ее используете.
Существует три способа выполнения арифметики с плавающей точкой:
Вычисление может выполняться аппаратными средствами с плавающей запятой или программным обеспечением на основе целочисленной арифметики.
Аппаратно это сделать намного быстрее, но многие микроконтроллеры не имеют аппаратного обеспечения с плавающей запятой. В этом случае вы можете либо избегать использования чисел с плавающей запятой (обычно это лучший вариант), либо полагаться на программную реализацию, которая будет частью библиотеки C.
В некоторых семействах контроллеров, например ARM, оборудование с плавающей запятой присутствует в некоторых моделях семейства, но отсутствует в других, поэтому gcc для этих семейств поддерживает оба. Кажется, ваша проблема в том, что вы перепутали два варианта.
Похоже, что ваша libc была создана для программных операций с плавающей точкой, в то время как ваш exe был скомпилирован с учетом аппаратной поддержки плавающей точки. В краткосрочной перспективе, вы можете принудительно использовать мягкие плавающие числа в качестве флага компилятора. (если вы используете gcc, я думаю, это -msoft-float)
В долгосрочной перспективе, если ваш целевой процессор имеет аппаратную поддержку операций с плавающей запятой, вы обычно хотите собрать или найти кросс-инструментарий с аппаратной поддержкой плавающей запятой для скорости. Некоторые семейства процессоров имеют варианты моделей с аппаратной поддержкой и без нее. Так, например, просто сказать, что ваш процессор - ARM, недостаточно, чтобы узнать, есть ли у вас аппаратная поддержка операций с плавающей запятой.