Jump to content

Recommended Posts

Posted

Приветствую!

При сборке большого проекта под Keenetik обнаружилось остутствие функций типа nearbyintf в libm.so. Наверняка эти ф-ции как-то можно включить при сборке toolchain. Увы, используемая софтина слепо полагается на C99 и C++11, а условие присутствия этих функций в man определены так:

nearbyint(), nearbyintf(), nearbyintl():

_XOPEN_SOURCE >= 600 || _POSIX_C_SOURCE >= 200112L ||

_ISOC99_SOURCE;

or cc -std=c99

Что посоветуете?

Posted

Очевидная мысль отредактировать c++config.h и пересобрать toolchain не помогла....

./build_dir/toolchain-mipsel-linux-uclibc/tools-mipsel-linux-mips32r2/mipsisa32r2el-unknown-linux-uclibc/include/c++/4.9.3/mipsisa32r2el-unknown-linux-uclibc/bits/c++config.h:

#undef _GLIBCXX_USE_C99_MATH_TR1

заменил на

#define _GLIBCXX_USE_C99_MATH_TR1 1

После чего make toolchain/clean и make

Может кто знает, как полностью пересобрать libm с этими расширениями?

Posted

То, что вы просите, отсутствует в uclibc, поэтому собрать ваш проект не получится без дополнительной внешней либы или замены этих функций. Сейчас мы пытаемся все перенести под полноценную glibc, там эти функции присутствуют...

Posted

Просто подождать?

Странно, на других OpenWRT таких проблем не было.

Или есть какой-то отдельный пакет с этими функциями и другими, собранными в отдельную либу?

Posted

Как-то не вышло... эта и многие похожие ф-ции очень платформо зависимы и написаны на асме для соответствующей платформы. Выдирать без глубокого анализа не выйдет (для mips там даже нет ясного кода - похоже какой-то generic код идёт, для тех платформ, где нет специфичной asm реализации)...

Также удивило, что nearbyint есть, а nearbyintf нет - они, вроде, вместе должны были быть. Или я ошибаюсь? Может их явно вырезали зачем-то?

@McMCC а когда планируется ? Или можем в uclibc как-то это явно добавить?

Вообще, странно, __USE_ISOC99 должен и в uClibc это добавлять....

В итоге решил проблему путём добавления вот такого хака (без асма) в проект

(выдержка из сурсов самой uClibc)

#define WRAPPER1(func) \

float func##f (float x) \

{ \

return (float) func((double)x); \

}

WRAPPER1(nearbyint)

Теперь проверим как это всё живёт на практике.

Posted

И что работает? Это же какая-то заглушка, там гораздо увесистая функция, чем этот врапер...

Posted
@McMCC а когда планируется ? Или можем в uclibc как-то это явно добавить?
Бросайте привязку к предложенному тулчейну и используйте свой. Или собирайте свою софтину в Entware, где необходимые вам функции в uclibc-ng присутсвуют, а билдрут как раз на основе OpenWrt'шного.
Guest
This topic is now closed to further replies.
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...

Important Information

This site uses cookies. By clicking "I accept" or continuing to browse the site, you authorize their use in accordance with the Privacy Policy.