我正在尝试在VirtualBox上编译Ubuntu 12.04上的程序,我收到以下错误:
daniel@daniel-VirtualBox:~/Documents/Redes/t1$ make
gcc -g -c -o bwc.o bwc.c
gcc -g -c -o jsocket6.4.o jsocket6.4.c
gcc -g -c -o Dataclient-seqn.o Dataclient-seqn.c
gcc -g -c -o bufbox.o bufbox.c
gcc -g bwc.o jsocket6.4.o Dataclient-seqn.o bufbox.o -o bwc-orig -lpthread
Dataclient-seqn.o: In function `Now':
/home/daniel/Documents/Redes/t1/Dataclient-seqn.c:68: undefined reference to `clock_gettime'
collect2: ld returned 1 exit status
make: *** [bwc-orig] Error 1
我发现我必须添加-lrt,但我不知道该怎么做,这是我的makefile:
CC=gcc
CFLAGS=-g # -m32
BIN=bwc-orig bwc bwc-tcp bws-tcp
all: $(BIN)
bwc-orig: bwc.o jsocket6.4.o Dataclient-seqn.o jsocket6.4.h bufbox.o
$(CC) $(CFLAGS) bwc.o jsocket6.4.o Dataclient-seqn.o bufbox.o -o $@ -lpthread
bwc: bwc.o jsocket6.4.o Dataclient-bigseq.o jsocket6.4.h bufbox.o
$(CC) $(CFLAGS) bwc.o jsocket6.4.o Dataclient-bigseq.o bufbox.o -o $@ -lpthread
bwc-tcp: bwc.o jsocket6.4.o Data-tcp.o jsocket6.4.h
$(CC) $(CFLAGS) bwc.o jsocket6.4.o Data-tcp.o -o $@ -lpthread
bws-tcp: bws.o jsocket6.4.o Data-tcp.o jsocket6.4.h
$(CC) $(CFLAGS) bws.o jsocket6.4.o Data-tcp.o -o $@ -lpthread
cleanall:
rm -f $(BIN) *.o
我修改了makefile,添加-lrt标志:
CC=gcc
CFLAGS=-g -lrt # -m32
BIN=bwc-orig bwc bwc-tcp bws-tcp
all: $(BIN)
bwc-orig: bwc.o jsocket6.4.o Dataclient-seqn.o jsocket6.4.h bufbox.o
$(CC) $(CFLAGS) bwc.o jsocket6.4.o Dataclient-seqn.o bufbox.o -o $@ -lpthread
bwc: bwc.o jsocket6.4.o Dataclient-bigseq.o jsocket6.4.h bufbox.o
$(CC) $(CFLAGS) bwc.o jsocket6.4.o Dataclient-bigseq.o bufbox.o -o $@ -lpthread
bwc-tcp: bwc.o jsocket6.4.o Data-tcp.o jsocket6.4.h
$(CC) $(CFLAGS) bwc.o jsocket6.4.o Data-tcp.o -o $@ -lpthread
bws-tcp: bws.o jsocket6.4.o Data-tcp.o jsocket6.4.h
$(CC) $(CFLAGS) bws.o jsocket6.4.o Data-tcp.o -o $@ -lpthread
cleanall:
rm -f $(BIN) *.o
但我得到以下输出(它几乎相同,除了我在开始时看到-lrt标志):
daniel@daniel-VirtualBox:~/Documents/Redes/t1$ make
gcc -g -lrt -c -o bwc.o bwc.c
gcc -g -lrt -c -o jsocket6.4.o jsocket6.4.c
gcc -g -lrt -c -o Dataclient-seqn.o Dataclient-seqn.c
gcc -g -lrt -c -o bufbox.o bufbox.c
gcc -g -lrt bwc.o jsocket6.4.o Dataclient-seqn.o bufbox.o -o bwc-orig -lpthread
Dataclient-seqn.o: In function `Now':
/home/daniel/Documents/Redes/t1/Dataclient-seqn.c:76: undefined reference to `clock_gettime'
collect2: ld returned 1 exit status
make: *** [bwc-orig] Error 1
我不知道如何添加-lrt标志。我实际上对makefile并不了解,也不知道该怎么做。
感谢。
编辑:没关系,我刚解决了。在运行make并获得最后一个输出之后,我决定运行gcc -g bwc.o jsocket6.4.o Dataclient-seqn.o bufbox.o -o bwc-orig -lpthread -lrt
它有效,因为问题是我必须在最后添加-lrt。
非常感谢。
答案 0 :(得分:1)
库标志需要最后。你看到的任何地方-lpthread
也会添加-lrt
(或者可能重构一个变量,所以如果你需要添加更多的库,你只需要改变一个地方)。