如何更改我的 makefile 以避免对数学库中函数的未定义引用?
How do I change my makefile to avoid the undefined reference to a function in the maths library?
我正在尝试在本地 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$
数学库(在 setitimer-helper.c
中使用的 <math.h>
header)没有正确链接。当我查看 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。
gcc -lm setitimer-helper.o -o setitimer-helper
问题在于您对 GCC 的参数顺序。试试这个:
gcc -o setitimer-helper setitimer-helper.o -lm
这是因为 ld
在链接时解析未定义符号的方式。基本上,你以前的方式,ld
首先看到 -lm
然后说 "I have no reason to include this library"。然后它包括您的 setitimer-helper.o
,其中有一个未解析的对 floor
的引用。之后就没有库可以考虑了,floor
一直没有解决。
如果-lm
之后出现,它可以解析对floor
的引用。
我正在尝试在本地 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$
数学库(在 setitimer-helper.c
中使用的 <math.h>
header)没有正确链接。当我查看 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。
gcc -lm setitimer-helper.o -o setitimer-helper
问题在于您对 GCC 的参数顺序。试试这个:
gcc -o setitimer-helper setitimer-helper.o -lm
这是因为 ld
在链接时解析未定义符号的方式。基本上,你以前的方式,ld
首先看到 -lm
然后说 "I have no reason to include this library"。然后它包括您的 setitimer-helper.o
,其中有一个未解析的对 floor
的引用。之后就没有库可以考虑了,floor
一直没有解决。
如果-lm
之后出现,它可以解析对floor
的引用。