我发现有些图书馆链接到librt.so,而其他图书馆则没有。我想知道它是在什么情况下链接的。
我从来没有直接使用过这个库。有没有演示显示它的直接用法?有没有相关的头文件?
这些函数适用于实时 Solaris(实时意味着在时间边界内保证响应),该函数已集成到主线 Solaris 中并且是 libc 的一部分。Librt 的存在只是出于历史、向后兼容性的原因,您不需要引用它。
小智 5
$ nm /usr/lib32/librt.a | grep ' T ' | grep -v ' __'
00000000 T aio_cancel
00000000 T aio_error
00000000 T aio_fsync
00000000 T aio_read
00000000 T aio_read64
00000000 T aio_return
00000130 T aio_suspend
00000000 T aio_write
00000000 T aio_write64
00000000 T timer_create
00000000 T timer_delete
00000000 T timer_getoverrun
00000000 T timer_gettime
00000000 T timer_settime
00000000 T shm_open
00000000 T shm_unlink
00000000 T mq_open
00000000 T mq_close
00000000 T mq_unlink
00000000 T mq_getattr
00000000 T mq_setattr
00000310 T mq_notify
00000000 T mq_send
00000000 T mq_receive
Run Code Online (Sandbox Code Playgroud)
事实上,如果我们看看man shm_open,我们会看到
与 -lrt 链接。
所以提供的函数列表似乎是正确的。
还有来自 Solaris https://docs.oracle.com/cd/E86824_01/html/E54772/librt-3lib.html的页面,它解释了 librt 库重新导出了 libc 中实际实现的一些符号,并且由于历史原因而存在它是在 Posix 标准的某些版本中指定的。