clock_gettime()在PC上运行良好,但在服务器上它会中止编译

时间:2015-09-16 07:38:04

标签: c linux ubuntu gcc pthreads

我使用以下函数来获取多线程程序的执行时间:

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

有人能帮帮我吗?

2 个答案:

答案 0 :(得分:7)

这只是一个链接错误 - 您需要关联librt - 更改:

gcc main_v8.c -lpthread

为:

gcc -Wall main_v8.c -lpthread -lrt

请注意,Linux man page for clock_gettime

中介绍了这一点
  

NAME         clock_getresclock_gettimeclock_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链接