我正在尝试使用Gake 4.73在Ubuntu 13.04上使用CMake编译Boost ASIO示例。
使用以下CMake文件:
cmake_minimum_required(VERSION 2.8)
ADD_DEFINITIONS(-std=c++11)
project(server)
find_package( Boost 1.53.0 REQUIRED system)
INCLUDE_DIRECTORIES( ${Boost_INCLUDE_DIR} )
add_executable( server server.cpp )
target_link_libraries(server ${Boost_LIBRARIES} )
add_executable( client client.cpp )
target_link_libraries(client ${Boost_LIBRARIES})
该项目应该使用C ++ 11并且与平台无关。使用CMakefile进行编译时,我会得到类似
的内容undefined reference to `pthread_join'
我的同事可以毫无问题地编译完全相同的Makefile。
问题:有没有办法强制CMake或Boost不使用PThreads但C ++ 11 Threads保持平台无关?
编辑:服务器编译时没有问题,只有客户端有问题。
答案 0 :(得分:5)
有没有办法强制CMake或Boost不使用PThreads但C ++ 11 Threads保持平台无关?
不,Boost.Threads和GCC的C ++线程库都是通过Pthreads实现的一个相当薄的层。
所以你有任何线索,为什么它在我的同事Linux机器上使用相同的make文件?也许他的编译器自动链接pthread?
可以使用--enable-libstdcxx-time=rt
配置GCC,这会导致C ++标准库链接到librt
和libpthread
。这意味着您不需要与-pthread
链接,因此您的同事可能正在使用这样配置的GCC。该配置选项不是默认选项,因为自动链接到libpthread.so
会对使用C ++标准库某些部分的单线程程序的性能产生负面影响。