Ошибка C ++:неопределенная ссылка на 'clock_gettime' и 'clock_settime'

StackOverflow https://stackoverflow.com/questions/2418157

Вопрос

Я довольно новичок в 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.)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top