0

我不明白为什么这会引发对“地板”的未定义引用“:

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

它不是被铸造成双倍的,这是地板接收的吗?

4

3 回答 3

7

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

gcc yourfile.c -o out -lm 

这也是 C FAQ 14.3项目。

于 2010-03-15T18:03:42.283 回答
5

也许是因为你没有链接到数学库?顺便说一句,该错误与强制转换和数据类型无关。

于 2010-03-15T18:03:01.223 回答
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”的库

于 2010-03-15T18:28:30.610 回答