Что такое 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.

Другие вопросы по тегам