Ошибка динамического соединения - PullRequest
1 голос
/ 20 января 2009

Я наблюдаю какое-то поведение, для которого мне трудно рассуждать.

У меня есть следующий фрагмент кода:

int timer_temp_var;

if ((timer_temp_var/1000.0) > 5.0) 
{
  //Do something
}

Эта часть приводит к ошибке ссылки.

> 
> dld: warning: Undefined symbol _d_fle"
> dld: no output written make[1]: ***
> [app.elf] Error 1

Но при замене проверки на равенство:

if ((timer_temp_var/1000.0) < 5.0)  // replace '>' with '<'.

Я не вижу проблем.

Также вместо деления на 1000.0, если я делаю на 1000 следующим образом:

 if ((timer_temp_var/1000) > 5) 
    {
      //Do something
    }

Я не вижу проблем независимо от вида проверки на равенство.

Приложение скомпилировано для работы в операционной системе pSOS.

В чем причина такого поведения?

Ответы [ 3 ]

2 голосов
/ 20 января 2009

Кажется, ваш компилятор заменяет оператор ">" вызовом функции _d_fle(), поэтому вам нужно связать некоторую библиотеку с вашим исполняемым файлом.

Удивительно, но "<" работает, хотя его следует заменить на функцию <code>d_fgt(), которая, скорее всего, находится в той же библиотеке.

Изменение с 100.0 на 100 превращает левый операнд в целое число ">", и, похоже, для сравнения целых чисел не требуется никаких вызовов функций - возможно, оно компилируется в инструкцию процессора, а не в вызов функции.

РЕДАКТИРОВАТЬ: похоже, вам нужна библиотека SFPE (программная эмуляция с плавающей точкой). У тебя есть что-нибудь вроде libsfpe?

1 голос
/ 20 января 2009

Вам не хватает библиотеки с плавающей точкой. Попробуйте включить математическую библиотеку (libm.a) и посмотрите, поможет ли это.

1 голос
/ 20 января 2009

Изменение с 1000.0 на 1000 указывает на проблему с операцией с плавающей запятой. Попробуйте привести 1000.0 к (int) и посмотрите, есть ли у вас прогресс.

Изменение знака <на> звучит неоправданно, чтобы привести к каким-либо изменениям ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...