Ошибка C++: неопределенная ссылка на "clock gettime" и "clock settime"
Я довольно новичок в Ubuntu, но я не могу заставить это работать. Он отлично работает на моих школьных компьютерах, и я не знаю, что я не делаю. Я проверил usr / include и времени.ч там просто отлично. Вот код:
#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 для сборки и запуска. Любая помощь будет большое, спасибо.
4 ответов
добавить -lrt
до конца командной строки g++. Это ссылки в librt.так что" в реальном времени " общая библиотека.
пример:
c++ -Wall filefork.cpp -lrt -O2
на gcc
версия 4.6.1, -lrt
должно быть после filefork.cpp в противном случае вы получите сообщение об ошибке ссылку.
некоторые старые gcc
версия не заботится о позиции.
я столкнулся с такой же ошибкой. Моя команда компоновщика включила библиотеку rt -lrt
что правильно, и он работал некоторое время. После переустановки Kubuntu он перестал работать.
отдельная тема форума предложила -lrt
нужно прийти после объектных файлов проекта.
Перемещение -lrt
к концу команды исправлена эта проблема для меня, хотя я не знаю подробностей почему.
начиная с glibc 2.17, библиотека linking -rt
больше не требуется.
на 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 (-lrt.)