强制提升使用C ++ 11线程

时间:2013-09-11 17:38:46

标签: c++ boost c++11 cmake

我正在尝试使用Gake 4.73在Ubuntu 13.04上使用CMake编译Boost ASIO示例。

http://www.boost.org/doc/libs/1_54_0/doc/html/boost_asio/example/cpp11/echo/blocking_tcp_echo_client.cpp

http://www.boost.org/doc/libs/1_54_0/doc/html/boost_asio/example/cpp11/echo/async_tcp_echo_server.cpp

使用以下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保持平台无关?

编辑:服务器编译时没有问题,只有客户端有问题。

1 个答案:

答案 0 :(得分:5)

  

有没有办法强制CMake或Boost不使用PThreads但C ++ 11 Threads保持平台无关?

不,Boost.Threads和GCC的C ++线程库都是通过Pthreads实现的一个相当薄的层。

  

所以你有任何线索,为什么它在我的同事Linux机器上使用相同的make文件?也许他的编译器自动链接pthread?

可以使用--enable-libstdcxx-time=rt配置GCC,这会导致C ++标准库链接到librtlibpthread。这意味着您不需要与-pthread链接,因此您的同事可能正在使用这样配置的GCC。该配置选项不是默认选项,因为自动链接到libpthread.so会对使用C ++标准库某些部分的单线程程序的性能产生负面影响。