GCC beheben: undefined reference to `_finite' or implicit declaration of function '_finite'

English Deutsch

Problem:

Beim Versuch, Windows-Code auf Linux zu kompilieren, werden häufig Meldungen wie folgende angezeigt

linker_warning.txt
lmmin.c:261:10: warning: implicit declaration of function ‘_finite’; did you mean ‘finite’? [-Wimplicit-function-declaration]
  116 |     if(!_finite(myvalue)){

or

linker_output.txt
/usr/bin/ld: mymath.c:(.text+0x1057): undefined reference to `_finite'

und der Code lässt sich nicht kompilieren.

Lösung

_finite ist eine Funktion, die nur unter Windows verfügbar ist. Um sie unter Linux mit GCC oder G++ zu verwenden, ist eine Option, isfinite() aus math.h zu verwenden:

finite_macro.c
#include <math.h>

#define _finite(v) (isfinite((v)))

Falls diese Funktion nicht verfügbar ist (wie auf einigen Mikrocontroller-Plattformen), kann __builtin_isfinite() verwendet werden. Beachten, dass glibc isfinite() als Alias für __builtin_isfinite() definiert. So verwenden:

finite_builtin.c
#define _finite(v) (__builtin_isfinite(v))

Für Code, der mit beiden Plattformen (Windows und Linux) kompatibel sein soll, verwenden

finite_compat.c
#ifdef __linux__
#define _finite(v) (__builtin_isfinite(v))
#endif

oder

finite_compat_alt.c
#include <math.h>

#ifdef __linux__
#define _finite(v) (isfinite((v)))
#endif

Check out similar posts by category: C/C++, GCC Errors