双层(time_t)

时间:2010-03-15 18:00:58

标签: c math floor

我无法理解为什么会抛出对'floor'的未定义引用“:

double curr_time = (double)time(NULL);
return floor(curr_time);

是不是已经将它转换为加倍,这是 floor 收到的?

3 个答案:

答案 0 :(得分:7)

您可能已经遇到了臭名昭着的-lm问题:编译为:

gcc yourfile.c -o out -lm 

这也是C FAQ 14.3项目。

答案 1 :(得分:5)

也许是因为你没有与数学库联系?该错误与演员表和数据类型无关,顺便说一句。

答案 2 :(得分:2)

您可能必须明确链接到库。在类UNIX系统上,这通常是“/usr/lib/libm.a”。默认情况下,C标准库应该链接,但数学库(取决于您的系统)没有链接,您可能必须明确链接。 (例如,在Mac OS X上,它默认情况下也链接在我的ubuntu系统上)。

请注意,这与您的包含路径无关。如果您使用类似UNIX的东西,您可能会在“/usr/include/math.h”下找到带有原型声明的标头,您的编译器将始终查找标题。

如果您使用的是gcc,可以直接链接到:

gcc yourfile.c /usr/lib/libm.a -o out

或者使用“-l nameroflibrary ”,如下所示:

gcc yourfile.c -lm -o out

这将在与C标准库相同的目录中查找名为“lib nameoflibrary .a”的库