c++ linux posix time.h

Error de Ubuntu Linux C++: referencia indefinida a ''clock_gettime'' y ''clock_settime''



posix time.h (4)

Agregue -lrt al final de la línea de comando de g ++. Esto enlaza en la biblioteca compartida librt.so "Real Time".

Soy bastante nuevo en Ubuntu, pero parece que no puedo hacer que esto funcione. Funciona bien en las computadoras de mi escuela y no sé lo que no estoy haciendo. He comprobado usr / include y time.h, está muy bien. Aquí está el 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; }

Estoy usando CodeBlocks como mi IDE para compilar y ejecutar también. Cualquier ayuda sería genial, gracias.


Desde glibc 2.17, la biblioteca que enlaza -rt ya no es necesaria.

El clock_* ahora es parte de la biblioteca principal de C. Puede ver el historial de cambios de glibc 2.17 donde se realizó este cambio explica el motivo de este cambio:

+* 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 decide actualizar glibc, puede consultar el rastreador de compatibilidad de glibc si le preocupa que haya algún problema con el glibc más nuevo.

Para verificar la versión de glibc instalada en el sistema, ejecute el comando:

ldd --version

(Por supuesto, está usando glibc antiguo (<2.17) y aún necesitará -lrt ).


Encontré el mismo error. Mi comando linker tenía la biblioteca rt incluída -lrt que es correcta y estuvo funcionando por un tiempo. Después de volver a instalar Kubuntu, dejó de funcionar.

Un hilo de foro separado sugirió que -lrt debía venir después de los archivos de objetos del proyecto. Mover el -lrt al final del comando me arregló este problema aunque no conozco los detalles de por qué.


ejemplo:

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

Para gcc versión 4.6.1, -lrt debe estar después de filefork.cpp; de lo contrario, obtendrá un error de enlace.

Algunas versiones antiguas de gcc no se preocupan por la posición.