2016-07-27 21 views
2

Ich erforsche hochpräzise Zeitfunktionen in C stieß ich auf clock_gettime und las darüber hier:Wie kann Code geschrieben werden, damit Bibliotheken in C nicht aufgerufen werden müssen?

http://man7.org/linux/man-pages/man2/clock_gettime.2.html

Ich stelle fest, es sagt:

Link with -lrt (only for glibc versions before 2.17). 

ich, warum frage ich mich, kann Verwenden Sie Zeitfunktionen mit niedrigerer Genauigkeit, ohne etwas zu meiner gcc-Kompilierzeile hinzufügen zu müssen? Gibt es eine Möglichkeit für mich, den Hochpräzisionscode anders zu verwenden, sodass ich nichts in meiner Kompilierzeile hinzufügen muss?

Ich verstehe, dass mein System eine alte ... alte Version von glibc verwendet, weshalb ich dies in meinem Fall tun muss, aber ich bitte für diejenigen (wie mich), die sind glibc konnte nicht aktualisiert werden.

-Code in progress:

#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

Wäre es nicht logisch, dass Sie Ihre glibc-Version veröffentlichen sollten? – djechlin

+0

Ich bin mir eigentlich nicht sicher, ob ich das aus arbeitsbedingten Gründen kann, aber weiß, dass es älter ist als 2.17. Würde diese Information Einfluss darauf haben, wie Code neu geschrieben werden sollte? – Volumetricsteve

Antwort

4

Die Funktionen, die Sie ohne erwähnen, eine Bibliothek aufrufen können, sind in libc entfernt. Die -lc Option zum Verknüpfen mit dieser Bibliothek wird automatisch für Sie hinzugefügt.

Um Funktionen in anderen Bibliotheken aufzurufen, müssen Sie die entsprechende Option -l (und möglicherweise) zu Ihrem Verknüpfungsbefehl hinzufügen. Das ist normal und du solltest nicht das Gefühl haben, dass etwas falsch ist.

Es gibt keine rationale Erklärung dafür, welche Funktionen in libc enthalten sind und welche nicht. Es ist nur ein historischer Zufall. Sei einfach dankbar für die netten Leute, die die Manpages für die richtigen Linkeroptionen geschrieben haben, damit sie nicht nach ihnen suchen müssen.

+0

Genau das habe ich gesucht. Vielen Dank! – Volumetricsteve

0

clock_gettime() ist ein Wrapper des Systemaufrufs. Wenn Sie sich in einer eingeschränkten Umgebung befinden (wo librt nicht verfügbar ist), können Sie syscall() direkt verwenden, um den libc-Wrapper zu umgehen. Sie können ein Beispiel in BusyBox libbb/time.c sehen.