我想编译beagleboard xm上的一些C代码。我尝试编译,但是我得到错误:未定义对math.h库中的'isfinite'的引用。这段代码完全在我所有的其他计算机上编译,并且在我的makefile中包含-lm。GCC错误:未定义的参考
我怀疑它可能是我的编译器,也许它是一个超版本?在Beagleboard上它的版本是4.3.3,但在我的电脑上是4.7.3,但我不知道如何获得更高版本。我认为opkg会自动获得最新版本。
任何想法,为什么会发生这种情况?
我想编译beagleboard xm上的一些C代码。我尝试编译,但是我得到错误:未定义对math.h库中的'isfinite'的引用。这段代码完全在我所有的其他计算机上编译,并且在我的makefile中包含-lm。GCC错误:未定义的参考
我怀疑它可能是我的编译器,也许它是一个超版本?在Beagleboard上它的版本是4.3.3,但在我的电脑上是4.7.3,但我不知道如何获得更高版本。我认为opkg会自动获得最新版本。
任何想法,为什么会发生这种情况?
函数infinite()
是C99的一部分。您的编译器默认使用旧版本的C语言。您需要编译标志-std=c99
才能启用此宏。
`gnu89' GNU dialect of ISO C90 (including some C99 features). This is the default for C code.
http://gcc.gnu.org/onlinedocs/gcc-4.3.3/gcc/C-Dialect-Options.html
isfinite
是C++ 11标准的一部分,gcc 4.3.3是老的要知道的。试试 或int finitef(float x);
。
@tomato问题是关于C而不是C++。 – 2013-06-19 22:04:07
它是C99的一部分,作为一个宏,在C++中它是一个函数:http://www.cplusplus.com/reference/cmath/isfinite/ – Aloys
是否'-lm'对象文件后会出现?如果不是的话,修复一下事情。如果它出现在目标文件之前,链接程序将忽略该库(它不提供扫描库时需要的任何符号),然后它将读取目标文件,然后它将不会找到符号在主C库中。 –