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))
#endifoder
finite_compat_alt.c
#include <math.h>
#ifdef __linux__
#define _finite(v) (isfinite((v)))
#endifCheck out similar posts by category:
C/C++, GCC Errors
If this post helped you, please consider buying me a coffee or donating via PayPal to support research & publishing of new posts on TechOverflow