Что такое librt.so? Как я могу использовать это напрямую?
Я считаю, что некоторые библиотеки связаны с librt.so
а другие нет. Мне интересно, с какими обстоятельствами это связано.
Я никогда не использовал эту библиотеку напрямую. Есть ли демонстрация, показывающая прямое использование этого? Есть ли связанный с ним файл заголовка?
2 ответа
Функции предназначены для Real Time Solaris (Real Time означает гарантированный отклик на временной границе), который с тех пор был интегрирован в основной Solaris и является частью libc. Librt присутствует только по историческим причинам, из-за обратной совместимости, и вам не нужно ссылаться на него.
$ 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.