【发布时间】:2015-10-17 21:01:36
【问题描述】:
我正在尝试测试fenv.h 中的一些函数,但是,当我编译下面的函数时,ld 以undefined reference to 'feclearexcept' 和undefined reference to 'fetestexcept' 失败。我正在运行针对 uclibc 编译的硬化 gentoo,我怀疑这至少有些相关
#include <stdio.h> /* printf */
#include <math.h> /* sqrt */
#include <fenv.h>
#pragma STDC FENV_ACCESS on
int main ()
{
feclearexcept (FE_ALL_EXCEPT);
sqrt(-1);
if (fetestexcept(FE_INVALID)) printf ("sqrt(-1) raises FE_INVALID\n");
return 0;
}
fenv.h 在/usr/include 中。 /usr/lib 中有静态库和动态库(libm.a、libm.so)。我正在用gcc -o test test.c -lm 编译;有没有人知道为什么链接器找不到相关功能。 fenv.h 中似乎没有对应的库。
更新:这篇已有十年历史的博文似乎表明 uclibc 不支持 fenv。我无法确定这种情况是否仍然存在,但如果是的话,还有什么可做的。 http://uclibc.10924.n7.nabble.com/missing-fenv-h-for-qemu-td2703.html
【问题讨论】:
-
链接器能找到
sqrt()吗? -
我运行了准确的发布代码。 ubuntu linux 14.04 和 gcc。编译器提出以下问题:警告:忽略#pragma STDC FENV_ACCESS。但它没有任何问题找到 feclearexcept() 函数或值 FE_ALL_EXCEPT 和 FE_INVALID。您的 /usr/include 目录中的 fenv.h 文件是否应如此?
-
是的。我运行强化的 uclibc gentoo linux,所以我怀疑它的特殊性是问题所在。它绝对有效的代码,并且可以在大多数系统上编译。
标签: c linux gcc uclibc floating-point-exceptions