Неопределенная ссылка на clock_gettime, gcc 4.6 и cmake - PullRequest
7 голосов
/ 01 марта 2012

У меня ошибка ссылки в cmake, которой нет при компиляции в системе с более старой версией gcc.

Конкретная ошибка - «неопределенная ссылка на clock_gettime» но -lrt появляется в командной строке.

Моя версия gcc:

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 версия 2.8.5

Я включаю требуемый "-lrt" через target_link_libraries в мой файл CMakeLists.txt. Я вижу, что это появляется в строке компилятора с make VERBOSE = 1

Я читал, что gcc 4.6 требователен к расположению библиотек ссылок в командной строке.

Как я могу это исправить для CMake?

EDIT: Линия связи

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'

Почему ../lib/libLibUtil.a появляется после -lrt, когда LibUtil (что будет libLibUtil.a) перед rt?

CMakeLists.txt включает в себя ...

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

1 Ответ

8 голосов
/ 01 марта 2012

Вы должны убедиться, что -lpthread -lrt появляются после ваши библиотеки, такие как ../lib/libLibUtil.a

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...