Как мне изменить мой 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
,