2012-03-01 66 views
7

我在cmake下有一个链接错误,我没有在具有旧版本gcc的系统上编译时出现链接错误。未定义的引用clock_gettime,gcc 4.6和cmake

具体的错误是“未定义的参考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” 通过我的CMakeLists.txt文件target_link_libraries。 我可以看到它出现在make VERBOSE的编译器行中:1 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' 

为什么../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) 
+2

尝试把'-lrt'添加库列表的末尾。并向我们​​展示确切的链接命令 – 2012-03-01 06:09:01

+0

@BasileStarynkevitch - 已更新。 – Matt 2012-03-01 06:17:28

回答

8

您应该确保-lpthread -lrt出现在您的库,例如../lib/libLibUtil.a

+0

我知道这是问题所在。但是,我该如何强制cmake实现这一目标? – Matt 2012-03-01 06:27:22

+1

好吧,我的坏。我正在编译该项目的一个副本,而不是我正在编辑的那个副本!的确,在libutil修复之后移动rt。 – Matt 2012-03-01 06:35:48

+0

奇怪的是,为什么海湾合作委员会4.6有这种挑剔? – Matt 2012-03-01 06:36:08

相关问题