Ошибка C ++:неопределенная ссылка на 'clock_gettime' и 'clock_settime'
Вопрос
Я довольно новичок в Ubuntu, но, похоже, у меня не получается заставить это работать.Это прекрасно работает на моих школьных компьютерах, и я не знаю, чего я не делаю.Я проверил usr/включить и время.h там просто великолепен.Вот этот код:
#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;
}
Я также использую CodeBlocks в качестве своей IDE для сборки и запуска.Любая помощь была бы большой, спасибо.
Решение
Добавить -lrt
до конца командной строки g ++.Это ссылка на librt.so Разделяемую библиотеку "Реального времени".
Другие советы
пример:
c++ -Wall filefork.cpp -lrt -O2
Для gcc
версия 4.6.1, -lrt
должно быть после filefork.cpp в противном случае вы получите сообщение об ошибке ссылки.
Некоторые постарше gcc
версия не заботится о позиции.
Я столкнулся с той же ошибкой.В мою команду компоновщика действительно была включена библиотека rt -lrt
это правильно, и какое-то время это работало.После переустановки Kubuntu он перестал работать.
В отдельной теме форума было предложено -lrt
необходимо было прийти после объектных файлов проекта.Перемещая -lrt
к концу выполнения команды эта проблема была устранена для меня, хотя я не знаю подробностей о том, почему.
Начиная с glibc версии 2.17, библиотека, связывающая -lrt
больше не требуется.
В clock_*
теперь они являются частью основной библиотеки C.Вы можете видеть история изменений glibc 2.17 где было сделано это изменение, объясняет причину этого изменения:
+* 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.
Если вы решите обновить glibc, то вы можете проверить отслеживание совместимости glibc если вы обеспокоены тем, возникнут ли какие-либо проблемы при использовании более нового glibc.
Чтобы проверить версию glibc, установленную в системе, выполните команду:
ldd --version
(Конечно, если вы используете старый glibc (<2.17) тогда вам все равно понадобится -lrt
.)