未定义的参考clock_gettime,gcc 4.6和cmake

Mat*_*att 7 gcc cmake linker-errors

我在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.
Run Code Online (Sandbox Code Playgroud)

cmake版本2.8.5

我在我的CMakeLists.txt文件中通过target_link_libraries包含了所需的"-lrt".我可以看到它出现在make VERBOSE = 1的编译器行中

我已经读过gcc 4.6在命令行上对链接库的位置很挑剔.

我怎样才能为CMake解决这个问题?

编辑:链接线

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'
Run Code Online (Sandbox Code Playgroud)

为什么../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)
Run Code Online (Sandbox Code Playgroud)

Bas*_*tch 8

你应该确保你的图书馆之后-lpthread -lrt出现../lib/libLibUtil.a