2012-03-01 2 views
7

gcc의 이전 버전을 사용하는 시스템에서 컴파일 할 때 cmake에서 링크 오류가 발생했습니다.clock_gettime, gcc 4.6에 대한 정의되지 않은 참조 및 cmake

특정 오류는 "clock_gettime에 대한 정의되지 않은 참조" 이지만 -lrt은 명령 줄에 표시됩니다.

내 GCC 버전 : 2.8.5

내 CMakeLists.txt 파일에 target_link_libraries을 통해 필요한 "-lrt"을 포함하고

gcc (Ubuntu/Linaro 4.6.1-9ubuntu3) 4.6.1 
Copyright (C) 2011 Free Software Foundation, Inc. 
This is free software; see the source for copying conditions. There is NO 
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 

cmake 버전. 컴파일러 줄에 표시되는 내용은 다음과 같습니다. make VERBOSE = 1

gcc 4.6은 명령 줄에서 링크 라이브러리의 위치가 까다로운 것으로 읽었습니다.

어떻게하면 CMake를 수정할 수 있습니까?

편집 : 링크 라인 LibUtil이 (libLibUtil.a 무엇을 것), 체류 시간 전에 때 왜 ../lib/libLibUtil.a이 -lrt 후 나타나고있다

Linking CXX executable ../bin/obbsd 
cd /home/matt/Desktop/Matt/OBBS/Build/server && /usr/bin/cmake -E cmake_link_script \ 
    CMakeFiles/obbsd.dir/link.txt --verbose=1 
/usr/bin/c++ -g CMakeFiles/obbsd.dir/Block.cpp.o \ 
    CMakeFiles/obbsd.dir/BlockFileCache.cpp.o \ 
     CMakeFiles/obbsd.dir/BlockFileStore.cpp.o \ 
     CMakeFiles/obbsd.dir/BlockMemoryCache.cpp.o \ 
     CMakeFiles/obbsd.dir/BlockStore.cpp.o CMakeFiles/obbsd.dir/Config.cpp.o \ 
     CMakeFiles/obbsd.dir/DeleteBlockSession.cpp.o \ 
     CMakeFiles/obbsd.dir/mConfigFile.cpp.o \ 
     CMakeFiles/obbsd.dir/mNetworkPacketReader.cpp.o \ 
     CMakeFiles/obbsd.dir/mNetworkPacketWriter.cpp.o \ 
     CMakeFiles/obbsd.dir/obbsd.cpp.o \ 
     CMakeFiles/obbsd.dir/ReadBlockSession.cpp.o CMakeFiles/obbsd.dir/Server.cpp.o \ 
     CMakeFiles/obbsd.dir/Session.cpp.o CMakeFiles/obbsd.dir/Utility.cpp.o \ 
     CMakeFiles/obbsd.dir/WriteBlockSession.cpp.o -o ../bin/obbsd -rdynamic \ 
     -lpthread -lrt ../lib/libLibUtil.a 
../lib/libLibUtil.a(mTimer.cpp.o): In function `mTimer::GetTick()': 
/home/matt/Desktop/Matt/OBBS/LibUtil/src/mTimer.cpp:108: undefined reference to 
    `clock_gettime' 

? CMakeLists.txt 포함

...

... 
add_executable(obbsd ${SERVER_SOURCE_FILES}) 
find_package(Threads REQUIRED) 
target_link_libraries(obbsd ${CMAKE_THREAD_LIBS_INIT} LibUtil rt) 
+2

시도 같은 후 당신의 라이브러리를 표시되는지 확인해야'라이브러리 목록의 끝에 추가 -lrt'. 정확한 연결 명령을 보여주세요 –

+0

@BasileStarynkevitch - 업데이트되었습니다. – Matt

답변

8

당신은 -lpthread -lrt을 넣어 ../lib/libLibUtil.a

+0

그게 문제라는 것을 알고 있습니다. 하지만 어떻게하면 쉐이크가 그렇게 할 수 있을까요? – Matt

+1

좋아, 내 잘못이야. 내가 편집하고 있던 프로젝트가 아닌 프로젝트의 복사본을 컴파일 중이었습니다! 정말로, libutil이 그것을 고친 후에 rt를 움직였다. – Matt

+0

흥미롭게도 gcc 4.6에 왜이 까다로운 점이 있습니까? – Matt

관련 문제