我对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来构建和运行。任何帮助都会很棒,谢谢。
答案 0 :(得分:273)
将-lrt
添加到g ++命令行的末尾。这链接在librt.so“实时”共享库中。
答案 1 :(得分:41)
示例:
c++ -Wall filefork.cpp -lrt -O2
对于gcc
版本4.6.1,-lrt
必须在 filefork.cpp 后,否则会出现链接错误。
某些较旧的gcc
版本并不关心这个位置。
答案 2 :(得分:26)
我遇到了同样的错误。我的链接器命令确实包含了包含-lrt
的rt库,这是正确的并且它已经工作了一段时间。重新安装Kubuntu后,它停止了工作。
单独的论坛帖子建议在项目对象文件之后需要-lrt
。
将-lrt
移动到命令的末尾为我解决了这个问题,虽然我不知道原因的细节。
答案 3 :(得分:25)
自glibc 2.17起,不再需要链接-rt
的库。
clock_*
现在是主C库的一部分。您可以看到执行此更改的change history of 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会出现任何问题,可以查看compatibility tracker of glibc。
要检查系统上安装的glibc版本,请运行命令:
ldd --version
(当然,你使用旧的glibc(&lt; 2.17),然后你仍然需要-lrt
。)