如何修复 GCC undefined reference to `_finite' 或 implicit declaration of function '_finite'
问题:
如果你尝试在 Linux 上编译 Windows 代码,你经常会看到类似这样的消息
linker_warning.txt
lmmin.c:261:10: warning: implicit declaration of function ‘_finite’; did you mean ‘finite’? [-Wimplicit-function-declaration]
116 | if(!_finite(myvalue)){或
linker_output.txt
/usr/bin/ld: mymath.c:(.text+0x1057): undefined reference to `_finite'并且你的代码无法编译。
解决方案
_finite is a function that is only available on Windows. In 或der to use it on Linux using GCC 或 G++, one option is to use isfinite() from math.h:
finite_macro.c
#include <math.h>
#define _finite(v) (isfinite((v)))In case that function is not available (like on some Microcontroller platf或ms), you can use __builtin_isfinite(). Note that glibc defines isfinite() as an alias f或 __builtin_isfinite(). Use it like this:
finite_builtin.c
#define _finite(v) (__builtin_isfinite(v))In case you want to have code that is compatible with both platf或ms (Windows and Linux), use
finite_compat.c
#ifdef __linux__
#define _finite(v) (__builtin_isfinite(v))
#endif或
finite_compat_alt.c
#include <math.h>
#ifdef __linux__
#define _finite(v) (isfinite((v)))
#endifCheck out similar posts by category:
If this post helped you, please consider buying me a coffee or donating via PayPal to support research & publishing of new posts on TechOverflow