Ubuntu Linux的C ++错误:未定义的引用'clock_gettime'和'clock_settime'

我对Ubuntu很新,但似乎无法得到这个工作。 它在我的学校电脑上工作正常,我不知道我不在做什么。 我已经检查过usr / include和time.h是否还好。 这里是代码:

#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; } 

我使用CodeBlocks作为我的IDE来构build和运行。 任何帮助将是伟大的,谢谢。

-lrt添加到g ++命令行的末尾。 这个链接在librt.so“Real Time”共享库中。

例:

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

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

一些旧的gcc版本不关心的立场。

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

一个单独的论坛线程build议-lrt需要在项目对象文件之后。 将-lrt移动到命令的末尾,为我解决了这个问题,虽然我不知道为什么。

由于glibc 2.17,链接-rt的库不再需要。

clock_*现在是主C库的一部分。 你可以看到glibc 2.17的变化历史logging,说明了这个变化的原因:

 +* 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 。)