`
cloudtech
  • 浏览: 4611490 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
文章分类
社区版块
存档分类
最新评论

使用timer_create时链接librt(lrt)的问题

 
阅读更多

因为要用到POSIX的定时器,编译时要动态链接librt(glibc的实时动态库)。

makefile链接时需要添加-lrt参数:

gcc -lrt a.o,b.o............. -o my_program

这个makefile在本地机器上运行得好好的,系统是Ubuntu 11.04 Desktop。

但是在服务器上就出现如下错误:

my_timer.o: In function `init_my_timer':
my_timer.c:(.text+0x1bb): undefined reference to `timer_create'
my_timer.o: In function `cancel_my_timer':
my_timer.c:(.text+0x220): undefined reference to `timer_settime'
my_timer.o: In function `start_my_timer':
my_timer.c:(.text+0x255): undefined reference to `timer_settime'
my_timer.o: In function `restart_my_timer':
my_timer.c:(.text+0x28a): undefined reference to `timer_settime'
collect2: ld returned 1 exit status
make: *** [my_program] Error 1

很明显是librt没有链接上!非常奇怪,服务器是Linux ubuntu-wfms-slaver-02 3.0.0-15-server

但是用 ldconfig -p 查看所有的动态库,看见是有librt的:

librt.so.1 (libc6,x86-64, OS ABI: Linux 2.6.15) => /lib/x86_64-linux-gnu/librt.so.1

librt.so (libc6,x86-64, OS ABI: Linux 2.6.15) => /usr/lib/x86_64-linux-gnu/librt.so

对这个问题非常不解!

偶然尝试将 -lrt 参数放在最后面:

gcc a.o,b.o............. -o my_program -lrt

结果就成功了~ 不太明白为什么参数的位置会有影响。



分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics