我使用以下函数来获取多线程程序的执行时间:
laksith@laksithPC:~/Desktop/test$ gcc main_v8.c -lpthread
laksith@laksithPC:~/Desktop/test$ ./a.out
在运行ubuntu 14.04的PC笔记本电脑上运行良好,但是当我尝试在服务器上编译并运行它时,编译失败就会出错。
在我的电脑笔记本电脑上:
[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
在服务器上:
-Dusername=myUserName -Dpassword=myPassword -DproviderImplementation=jgit
有人能帮帮我吗?
答案 0 :(得分:7)
这只是一个链接错误 - 您需要关联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
- 时钟和时间函数概要
#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);
与-lrt链接。
请注意,较新版本的glibc
(&gt; = 2.17)不再需要与librt
进行关联,这可能解释了为什么您不需要添加-lrt
用于在PC上构建Ubuntu 14。
答案 1 :(得分:2)
来自手册页
man -a clock_gettime
CLOCK_GETRES(2)Linux程序员手册
CLOCK_GETRES(2)NAME clock_getres,clock_gettime,clock_settime - 时钟和时间函数
概要 #include
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的功能测试宏要求(参见 feature_test_macros(7)):
clock_getres(), clock_gettime(), clock_settime(): _POSIX_C_SOURCE >= 199309L
与-lrt链接