9

我发现一些库链接到librt.so,而另一些则没有。我想知道它在什么情况下是相关的。

我从来没有直接使用过这个库。有没有演示直接使用它的演示?有没有相关的头文件?

4

2 回答 2

6

这些函数适用于实时 Solaris(实时意味着在时间边界内保证响应),它已被集成到主线 Solaris 中并且是 libc 的一部分。Librt 仅出于历史、向后兼容性的原因而存在,您不需要引用它。

于 2019-05-15T18:11:38.853 回答
1
$ 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

事实上,如果我们看一下man shm_open,我们会看到

与 -lrt 链接。

所以提供的功能列表似乎是正确的。

Solaris https://docs.oracle.com/cd/E86824_01/html/E54772/librt-3lib.html也有这个页面,它解释了 librt 库重新导出了一些实际在 libc 中实现的符号,并且由于历史原因而存在它是在某些版本的 Posix 标准中指定的。

于 2019-05-14T11:43:01.307 回答