gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 02:50:58 24 4
gpt4 key购买 nike

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

最佳答案

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

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

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

LFLAGS = -Wall $(DEBUG) -lrt

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

关于c++ - 如何使用 g++ 与 -lrt 链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20022984/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com