如何使用g ++与-lrt链接

时间:2013-11-16 19:46:25

标签: c++ makefile g++

我正在使用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来执行此操作?

1 个答案:

答案 0 :(得分:3)

您只需在生成二进制可执行文件时链接库。尝试将链接标志-lrt添加到二进制编译指令中,如:

BSTvRBT: $(OBJS)
$(CC) $(LFLAGS) $(OBJS) -lrt -o BSTvRBT

如果你想将标志添加到宏$(LFLAGS),请将标志放在对象之后 - 因为新版本的gcc对订单有限制,对象/标志作为参数传递给编译器。你最终可能会:

LFLAGS = -Wall $(DEBUG) -lrt

BSTvRBT: $(OBJS)
$(CC) $(OBJS) $(LFLAGS) -o BSTvRBT