我使用以下函数来获取多线程程序的执行时间:
clock_gettime(CLOCK_MONOTONIC,&start);
/*
******PROGRAM CODE*************
*/
clock_gettime(CLOCK_MONOTONIC,&end);
它在我运行 ubuntu 14.04 的 PC 笔记本电脑上运行良好,但是当我尝试在服务器上编译和运行它时,编译失败并出现错误。
在我的笔记本电脑上:
laksith@laksithPC:~/Desktop/test$ gcc main_v8.c -lpthread
laksith@laksithPC:~/Desktop/test$ ./a.out
在服务器上:
[laksith@gca test_run]$ gcc main_v8.c -lpthread
/tmp/ccyMMmx.o:In function 'main':
main_v8.c:(.text+0x21):undefined reference to 'clock_gettime'
main_v8.c:(.text+0x182):undefined reference to 'clock_gettime'
collect2: ld returned 1 exit status
有人可以帮我吗?
最佳答案
这只是一个链接错误 - 您需要链接 librt
- 改变:
gcc main_v8.c -lpthread
到:
gcc -Wall main_v8.c -lpthread -lrt
请注意,这包含在 Linux man page for clock_gettime
中:
NAME
clock_getres
,clock_gettime
,clock_settime
- clock and time functionsSYNOPSIS
#include <time.h>
int clock_getres(clockid_t clk_id, struct timespec *res); int clock_gettime(clockid_t clk_id, struct timespec *tp); int clock_settime(clockid_t clk_id, const struct timespec *tp);
Link with -lrt.
请注意 glibc
的较新版本(>= 2.17) 不再需要与 librt
链接,这可能解释了为什么您不需要添加 -lrt
适用于在您的 PC 上构建的 Ubuntu 14。
关于clock_gettime() 在 PC 上运行良好,但在服务器上它会中止编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32602458/