it-swarm.com.de

C ++ Fehler: undefinierter Verweis auf 'clock_gettime' und 'clock_settime'

Ich bin ziemlich neu in Ubuntu, aber ich kann nicht scheinen, dies zum Laufen zu bringen. Es funktioniert gut auf meinen Schulcomputern und ich weiß nicht, was ich nicht tue. Ich habe sr/include und time.h ist da ganz gut. Hier ist der Code:

#include <iostream>
#include <time.h>
using namespace std;

int main()
{
    timespec time1, time2;
    int temp;
    clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &time1);
    //do stuff here
    clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &time2);
    return 0;
}

Ich verwende CodeBlocks als meine IDE), um zu erstellen und auch auszuführen. Jede Hilfe wäre großartig, danke.

153
naspinski

Hinzufügen -lrt bis zum Ende der g ++ - Befehlszeile. Dieser Link befindet sich in der gemeinsam genutzten Bibliothek "Real Time" von librt.so.

277
Dmitry Yudakov

beispiel:

c++ -Wall filefork.cpp -lrt -O2

Für gcc Version 4.6.1, -lrt muss nach filefork.cpp sein, sonst wird ein Linkfehler angezeigt.

Einige ältere gcc -Versionen interessieren sich nicht für die Position.

42
jing kang

Ich bin auf den gleichen Fehler gestoßen. Mein Linker-Befehl enthielt die rt-Bibliothek -lrt das ist richtig und es hat eine Weile funktioniert. Nach der Neuinstallation von Kubuntu funktionierte es nicht mehr.

Ein separater Forenthread schlug das -lrt musste nach den Projektobjektdateien kommen. Bewegen des -lrt bis zum Ende des Befehls hat dieses Problem für mich behoben, obwohl ich nicht weiß, warum.

26
Adam

Seit der glibc-Version 2.17 ist die Bibliothek, die -lrt wird nicht mehr benötigt.

Das clock_* sind jetzt Teil der C-Hauptbibliothek. In der Änderungshistorie von glibc 2.17 , in der diese Änderung vorgenommen wurde, wird der Grund für diese Änderung erläutert:

+* The `clock_*' suite of functions (declared in <time.h>) is now available
+  directly in the main C library.  Previously it was necessary to link with
+  -lrt to use these functions.  This change has the effect that a
+  single-threaded program that uses a function such as `clock_gettime' (and
+  is not linked with -lrt) will no longer implicitly load the pthreads
+  library at runtime and so will not suffer the overheads associated with
+  multi-thread support in other code such as the C++ runtime library.

Wenn Sie sich für ein Upgrade von glibc entscheiden, können Sie den Kompatibilitäts-Tracker von glibc überprüfen, wenn Sie Bedenken haben, ob es Probleme mit dem neueren glibc geben könnte.

Führen Sie den folgenden Befehl aus, um die auf dem System installierte glibc-Version zu überprüfen:

ldd --version

(Natürlich, wenn Sie altes glibc (<2.17) benutzen, dann brauchen Sie noch -lrt.)

25
P.P.