Перейти к содержанию

Рекомендуемые сообщения

Опубликовано

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

При сборке большого проекта под 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

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

Опубликовано

Очевидная мысль отредактировать 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 с этими расширениями?

Опубликовано

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

Опубликовано

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

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

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

Опубликовано
Просто подождать?
С очень большой долей вероятности можно выдрать нужные функции из libc и положить в отдельный файл исходников. И ждать не придётся. Пару-тройку раз удавалось.
Опубликовано

Как-то не вышло... эта и многие похожие ф-ции очень платформо зависимы и написаны на асме для соответствующей платформы. Выдирать без глубокого анализа не выйдет (для 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)

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

Опубликовано

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

Опубликовано
@McMCC а когда планируется ? Или можем в uclibc как-то это явно добавить?
Бросайте привязку к предложенному тулчейну и используйте свой. Или собирайте свою софтину в Entware, где необходимые вам функции в uclibc-ng присутсвуют, а билдрут как раз на основе OpenWrt'шного.
Гость
Эта тема закрыта для публикации ответов.
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...

Важная информация

На этом сайте используются файлы cookie. Нажимая "Я принимаю" или продолжая просмотр сайта, вы разрешаете их использование: Политика конфиденциальности.