C + + 错误: 未定义的“ lock _ gettime”和“ lock _ settime”引用

我是 Ubuntu 的新手,但我似乎不能让这个工作。它在我学校的电脑上运行得很好,我不知道我在做什么。我检查了 Usr/include和时间,没问题。密码如下:

#include <iostream>
#include <time.h>
using namespace std;


int main()
{
timespec time1, time2;
int temp;
clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &time1);
//do stuff here
clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &time2);
return 0;
}

我使用代码块作为我的 IDE 来构建和运行。任何帮助都将是伟大的,谢谢。

201106 次浏览

-lrt添加到 g + + 命令行的末尾。

我遇到了同样的错误。我的链接器命令有 rt 库包括 -lrt,这是正确的,它工作了一段时间。在重新安装 Kubuntu 之后,它就停止工作了。

一个单独的论坛线程建议 -lrt需要来后的项目目标文件。 将 -lrt移动到命令的末尾为我解决了这个问题,尽管我不知道具体原因。

例如:

c++ -Wall filefork.cpp -lrt -O2

对于 gcc版本4.6.1,-lrt必须是 之后 Filefork.cpp,否则会出现链接错误。

一些较老的 gcc版本不关心位置。

自 glibc 版本2.17以来,不再需要链接 -lrt的库。

clock_*现在是主 C 库的一部分。你可以看到 更改 glibc 2.17的历史在哪里做了这个改变解释了这个改变的原因:

+* The `clock_*' suite of functions (declared in <time.h>) is now available
+  directly in the main C library.  Previously it was necessary to link with
+  -lrt to use these functions.  This change has the effect that a
+  single-threaded program that uses a function such as `clock_gettime' (and
+  is not linked with -lrt) will no longer implicitly load the pthreads
+  library at runtime and so will not suffer the overheads associated with
+  multi-thread support in other code such as the C++ runtime library.

如果您决定升级 glibc,那么您可以检查 Glibc 兼容性跟踪器,如果您担心使用较新的 glibc 会出现任何问题的话。

要检查系统上安装的 glibc 版本,请运行以下命令:

ldd --version

(当然,如果使用的是老的 glibc (< 2.17) ,那么仍然需要 -lrt。)