erro C ++: undefined reference to 'clock_gettime' e 'clock_settime'
Pergunta
Eu sou muito novo para Ubuntu, mas eu não consigo chegar a este trabalho. Ele funciona muito bem em meus computadores da escola e eu não sei o que eu não estou fazendo. Fui verificar usr / include e time.h está lá muito bem. Aqui está o código:
#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;
}
Eu estou usando CodeBlocks como meu IDE para criar e executar bem. Qualquer ajuda seria ótimo, obrigado.
Solução
Adicionar -lrt
para o final do g ++ linha de comando. Este links no librt.so "tempo real" biblioteca compartilhada.
Outras dicas
exemplo:
c++ -Wall filefork.cpp -lrt -O2
Para gcc
versão 4.6.1, -lrt
deve ser depois filefork.cpp caso contrário você obter um erro de link.
Alguns versão mais antiga gcc
não se preocupa com a posição.
Eu encontrei o mesmo erro. Meu comando vinculador tinha a biblioteca rt incluído -lrt
o que é correto e ele estava funcionando por um tempo. Depois de instalar re-Kubuntu ele parou de funcionar.
Um tópico do fórum separado sugeriu a -lrt
precisava vir depois que os arquivos objeto do projeto.
Movendo o -lrt
ao final do comando corrigido este problema para mim, embora eu não conhecer os detalhes do porquê.
Desde glibc versão 2.17, o -lrt
ligando biblioteca não é mais necessário.
O clock_*
agora fazem parte da biblioteca C principal. Você pode ver o histórico de alterações da glibc 2.17 onde esta mudança foi feito explica a razão para esta mudança:
+* 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.
Se você decidir atualizar glibc, então você pode verificar o compatibilidade rastreador de glibc se você está preocupado se haveria quaisquer problemas usando o mais recente glibc.
Para verificar a versão glibc instalado no sistema, execute o comando:
ldd --version
(Claro, se você estiver usando glibc antiga (<2,17), então você ainda vai precisar -lrt
.)