【问题标题】:how to link with -lrt using g++如何使用 g++ 与 -lrt 链接
【发布时间】:2013-11-16 19:46:24
【问题描述】:

我使用的是 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 来做到这一点?

【问题讨论】:

    标签: c++ makefile g++


    【解决方案1】:

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

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

    如果您想将标志添加到宏$(LFLAGS),请将标志放在对象之后——因为较新版本的 gcc 限制了将对象/标志作为参数传递给编译器的顺序。你可能会得到:

    LFLAGS = -Wall $(DEBUG) -lrt
    
    BSTvRBT: $(OBJS)
    $(CC) $(OBJS) $(LFLAGS) -o BSTvRBT
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-04-27
      • 2018-04-13
      • 2011-04-18
      • 2012-09-19
      • 1970-01-01
      • 2020-09-17
      • 1970-01-01
      相关资源
      最近更新 更多