L'erreur de C: undefined reference to 'clock_gettime' et 'clock_settime'
Question
Je suis assez nouveau pour Ubuntu, mais je ne peux pas sembler obtenir ce travail. Il fonctionne très bien sur mes ordinateurs de l'école et je ne sais pas ce que je ne fais pas. J'ai vérifié usr / include et time.h est-il très bien. Voici le 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;
}
J'utilise CodeBlocks comme mon IDE pour construire et exécuter aussi bien. Toute aide serait génial, je vous remercie.
La solution
Ajouter -lrt
à la fin de la ligne de commande de g. Ce lien dans le librt.so "Real Time" Bibliothèque partagée.
Autres conseils
exemple:
c++ -Wall filefork.cpp -lrt -O2
Pour la version 4.6.1 gcc
, -lrt
doit être après filefork.cpp sinon vous obtenez une erreur de lien.
Certains ancienne version de gcc
ne se soucie pas de la position.
J'ai rencontré la même erreur. Ma commande éditeur de liens n'ont la bibliothèque rt inclus -lrt
ce qui est correct et il travaillait pendant un certain temps. Après réinstallant Kubuntu, il a cessé de fonctionner.
Un fil de forum distinct suggéré le -lrt
nécessaire pour venir après les fichiers objet du projet.
Déplacement du -lrt
à la fin de la commande fixe ce problème pour moi, bien que je ne connais pas les détails de pourquoi.
Depuis la version glibc 2.17, la bibliothèque reliant -lrt
n'est plus nécessaire.
Les clock_*
font désormais partie de la bibliothèque C principale. Vous pouvez voir le rel="nofollow changer l'histoire de la glibc 2.17 où ce changement a été fait, explique la raison de ce changement:
+* 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.
Si vous décidez de mettre à niveau glibc, vous pouvez vérifier le suivi de la compatibilité de glibc si vous êtes concernés s'il y aurait des problèmes en utilisant la glibc plus récente.
Pour vérifier la version glibc installé sur le système, exécutez la commande suivante:
ldd --version
(Bien sûr, si vous utilisez vieux glibc (<2.17), alors vous aurez toujours besoin -lrt
.)