Как мне изменить мой make-файл, чтобы избежать неопределенной ссылки на функцию в библиотеке математики?

Я пытаюсь установить PintOS на мою локальную машину с Ubuntu 14.04. Когда я пытаюсь запустить make для компиляции утилит. Я получаю следующую ошибку.

ankitkal@ankitkal-Inspiron-5521:~/os/pintos/src/utils$ ls
backtrace  Makefile   pintos   pintos.~1.55.~  pintos-mkdisk             setitimer-helper.o  squish-unix.c
CVS        Makefile~  pintos~  pintos-gdb      setitimer-helper.c         squish-pty.c
ankitkal@ankitkal-Inspiron-5521:~/os/pintos/src/utils$ make
gcc -lm  setitimer-helper.o   -o setitimer-helper
setitimer-helper.o: In function `main':
setitimer-helper.c:(.text+0xbe): undefined reference to `floor'
collect2: error: ld returned 1 exit status
make: *** [setitimer-helper] Error 1
ankitkal@ankitkal-Inspiron-5521:~/os/pintos/src/utils$ 

Библиотека математики (для <math.h> заголовок, который используется в setitimer-helper.c) неправильно связывается. Когда я смотрю в Makefile, это вывод.

ankitkal@ankitkal-Inspiron-5521:~/os/pintos/src/utils$ cat Makefile
all: setitimer-helper squish-pty squish-unix

CC = gcc
CFLAGS = -Wall -W
LDFLAGS = -lm
setitimer-helper: setitimer-helper.o
squish-pty: squish-pty.o
squish-unix: squish-unix.o

clean: 
    rm -f *.o setitimer-helper squish-pty squish-unix

Подскажите пожалуйста как это исправить. Кстати, я использую gcc-4.8.6.

1 ответ

Решение
gcc -lm  setitimer-helper.o   -o setitimer-helper

Проблема в порядке ваших аргументов в GCC. Попробуй это:

gcc -o setitimer-helper setitimer-helper.o  -lm

Это из-за того, что ld разрешает неопределенные символы при связывании. В основном, как у вас было раньше, ld первый видит -lm и говорит: "У меня нет причин включать эту библиотеку". Затем он включает в себя ваш setitimer-helper.o который имеет неразрешенную ссылку на floor, После этого больше нет библиотек для рассмотрения, и floor остается нерешенным.

Если -lm приходит позже, он может разрешить ссылку на floor,

Другие вопросы по тегам