我在C中探索高精度时间函数。我遇到了clock_gettime并在此处阅读:
http://man7.org/linux/man-pages/man2/clock_gettime.2.html
我注意到它说:
Link with -lrt (only for glibc versions before 2.17).
我想知道为什么我可以使用低精度时间函数而无需向gcc编译行添加任何内容?有没有办法让我以不同的方式使用高精度代码,所以我不需要在编译行中添加任何东西?
我知道我的系统使用的是旧版本的glibc,这就是为什么我必须在我的情况下这样做,但我要求那些(比如我自己)谁无法更新glibc。
正在进行的代码:
#include <stdio.h>
#include <time.h>
int main(int argc, char **argv)
{
int result;
struct timespec tp;
clockid_t clk_id;
// clk_id = CLOCK_REALTIME;
clk_id = CLOCK_MONOTONIC;
// clk_id = CLOCK_BOOTTIME;
// clk_id = CLOCK_PROCESS_CPUTIME_ID;
// int clock_gettime(clockid_t clk_id, struct timespec *tp);
result = clock_gettime(clk_id, &tp);
printf("result: %i\n", result);
printf("tp.tv_sec: %lld\n", tp.tv_sec);
printf("tp.tv_nsec: %ld\n", tp.tv_nsec);
result = clock_getres(clk_id, &tp);
printf("result: %i\n", result);
printf("tp.tv_sec: %lld\n", tp.tv_sec);
printf("tp.tv_nsec: %ld\n", tp.tv_nsec);
}
答案 0 :(得分:4)
您可以在不提及库的情况下调用的函数位于libc中。将为您静默添加链接到此库的-lc
选项。
要调用其他库中的函数,必须在链接命令中添加相应的-l
(以及可能的-L
)选项。这是正常的,你不应觉得这意味着出了问题。
对于libc中包含哪些函数以及哪些函数不包含在内,没有合理的解释。这只是历史事故。感谢那些编写手册页以便将必要的链接器选项放在页面顶部的好人,这样你就不必去寻找它们了。
答案 1 :(得分:0)
clock_gettime()是系统调用的包装器。如果您所处的环境有限(librt不可用),您可以直接使用syscall()绕过libc包装器。您可以在BusyBox libbb/time.c中看到一个示例。