C ++ 오류 : 'clock_gettime'및 'clock_settime'에 대한 정의되지 않은 참조
문제
나는 우분투를 처음 접했지만 이것을 작동시킬 수는 없습니다. 그것은 내 학교 컴퓨터에서 잘 작동하며 내가 무엇을하지 않는지 모르겠습니다. 확인 했어 USR/포함 그리고 Time.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
.)