Возьмите этот код и поместите его в файл ceil.c
:
#include <math.h>
#include <stdio.h>
int main(void)
{
printf("%f\n", ceil(1.2));
return 0;
}
Скомпилируйте его с помощью:
$ gcc -o ceil ceil.c
$ gcc -o ceil ceil.c -lm
Один из этих двух должен работать.Если ни один из них не работает, покажите полное сообщение об ошибке для каждой компиляции.Обратите внимание, что -lm
появляется после имени исходного файла (или объектного файла, если вы компилируете источник в объект перед связыванием).
Примечания:
Aсовременный компилятор вполне может оптимизировать код для передачи 2.0 непосредственно в printf()
, не вызывая ceil()
вообще во время выполнения, поэтому не нужно вообще использовать библиотеку математики.
Полезное правило: перечисление объектных файлов и исходных файлов в командной строке перед библиотеками.Этот ответ показывает, что используется: -lm
идет после исходного файла ceil.c
.Если вы строите с make
и т. Д., То вы обычно используете ceil.o
в командной строке (вместе с другими объектными файлами);обычно вы должны перечислить все объектные файлы перед любой из библиотек.
Иногда бывают исключения из практического правила, но они редки и будут документированы для конкретных случаев, когдаисключение ожидается / требуется.При отсутствии явных документов об обратном примените правило большого пальца.