Ошибки связывания с -ffast-math (-ffinite-math-only) и glib c 2.31 - PullRequest
1 голос
/ 05 августа 2020

Недавно из glib c (а именно с glib c 2.31, включенного в Ubuntu 20.04), похоже, были удалены семейства функций, такие как __exp_finite().

Эти функции использовались при компиляции с g cc вариант -ffinite-math-only (или -ffast-math, который включает указанную опцию).

Моя проблема в том, что у меня есть скомпилированные закрытые исходные коды stati c библиотеки, предоставленные третьим стороны, которые предположительно были скомпилированы с этим флагом, и эти библиотеки генерируют ошибки связывания с отсутствующими математическими функциями, такими как __exp_finite().

Мой вопрос: какое мое лучшее решение?

  1. Отправить выдачу третьим лицам, попросите их удалить флаг нарушения из их командной строки и подождать (месяцев ...)?
  2. Отправить проблему разработчикам glib c, объяснив, что они нарушили совместимость с этим вариант сборки?
  3. Определить себе недостающие функции?
  4. ?

Я бы предпочел опустить решения, которые требуют компиляции в другом среды, чем родная, предоставляемая Ubuntu (а позже, возможно, другим дистрибутивом, поскольку они обновляют glib c).

Надеюсь, я правильно понял проблему, и любая помощь приветствуется.

1 Ответ

0 голосов
/ 07 августа 2020

Я добавил в наш основной проект следующий файл c ++, определяя недостающие функции:

#include <math.h>

extern "C" {
    double __exp_finite(double x) { return exp(x); }
    double __log_finite(double x) { return log(x); }
    double __pow_finite(double x, double y) { return pow(x, y); }

    float __expf_finite(float x) { return expf(x); }
    float __logf_finite(float x) { return logf(x); }
    float __powf_finite(float x, float y) { return powf(x, y); }
}

Это, безусловно, самое быстрое решение.

...