этаж двойной (time_t) - PullRequest
       7

этаж двойной (time_t)

0 голосов
/ 15 марта 2010

Я не могу понять, почему это выдает неопределенную ссылку на `floor '":

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

Разве это не было приведено к удвоению, что получает этаж ?

Ответы [ 3 ]

7 голосов
/ 15 марта 2010

Возможно, вы столкнулись с печально известной проблемой -lm: скомпилируйте как:

gcc yourfile.c -o out -lm 

Это также C FAQ 14.3 .

5 голосов
/ 15 марта 2010

Может быть, потому что вы не связаны с математической библиотекой? Ошибка не имеет ничего общего с приведениями и типами данных, кстати.

2 голосов
/ 15 марта 2010

Вы, вероятно, должны явно ссылаться на библиотеку. В 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"

...