使用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

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

经验分享 程序员 微信小程序 职场和发展