我正在使用Ubuntu 12.04。 当我尝试通过键入make来编译时,我收到以下错误:
undefined reference to `clock_gettime'
collect2: ld returned 1 exit status
我的makefile如下所示:
OBJS = main.o bst.o rbt.o
OBJS_BST_TEST = bst_test.o bst.o
OBJS_RBT_TEST = rbt_test.o bst.o rbt.o
CC = g++
DEBUG = -g
CFLAGS = -std=c++0x -Wall -c $(DEBUG)
LFLAGS = -Wall $(DEBUG)
BSTvRBT: $(OBJS)
$(CC) $(LFLAGS) $(OBJS) -o BSTvRBT
BST_TEST: $(OBJS_BST_TEST)
$(CC) $(LFLAGS) $(OBJS_BST_TEST) -o BST_TEST
RBT_TEST: $(OBJS_BST_TEST)
$(CC) $(LFLAGS) $(OBJS_BST_TEST) -o RBT_TEST
bst_test.o: bst.h
$(CC) $(CFLAGS) bst_test.cpp
rbt_test.o: bst.h rbt.h
$(CC) $(CFLAGS) rbt_test.cpp
main.o: bst.h rbt.h
$(CC) $(CFLAGS) main.cpp -lrt
bst.o: bst.h bst.cpp exceptions.h
$(CC) $(CFLAGS) bst.cpp
rbt.o: rbt.h rbt.cpp bst.h exceptions.h
$(CC) $(CFLAGS) rbt.cpp
clean:
\rm *.o *~ BSTvRBT BST_TEST RBT_TEST
tar:
tar cfv BSTvRBT.tar main.cpp bst.h bst.cpp rbt.h rbt.cpp exceptions.h bst_test.cpp rbt_test.cpp README.md makefile
all: BSTvRBT BST_TEST RBT_TEST
请参阅以main.o开头的行 在main.cpp中,我有
#include <time.h>
和
int ret;
timespec start;
ret = clock_gettime(CLOCK_REALTIME, &start);
根据我的阅读,我必须在编译时链接-lrt。 如何修改我的makefile来执行此操作?
答案 0 :(得分:3)
您只需在生成二进制可执行文件时链接库。尝试将链接标志-lrt
添加到二进制编译指令中,如:
BSTvRBT: $(OBJS)
$(CC) $(LFLAGS) $(OBJS) -lrt -o BSTvRBT
如果你想将标志添加到宏$(LFLAGS)
,请将标志放在对象之后 - 因为新版本的gcc对订单有限制,对象/标志作为参数传递给编译器。你最终可能会:
LFLAGS = -Wall $(DEBUG) -lrt
BSTvRBT: $(OBJS)
$(CC) $(OBJS) $(LFLAGS) -o BSTvRBT