-1

我正在尝试在我的本地 Ubuntu 14.04 机器上安装 PintOS。当我尝试运行 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。

4

1 回答 1

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

于 2015-09-25T03:35:26.580 回答