C++ 强制Boost使用C++;11线
我试图在Ubuntu13.04和GCC4.73上使用CMake编译Boost ASIO示例 使用以下CMake文件:C++ 强制Boost使用C++;11线,c++,boost,c++11,cmake,C++,Boost,C++11,Cmake,我试图在Ubuntu13.04和GCC4.73上使用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( se
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线程来保持平台独立性
编辑:服务器编译没有问题,而只有客户端有问题
有没有办法强迫CMake或Boost不使用PThreads,而是使用C++11线程来保持平台独立性
不,Boost。线程和GCC的C++线程库在pthy.t/p>上被实现为一个相当薄的层。 所以你有任何线索,为什么它在我同事的Linux机器上使用相同的make文件?也许他的编译器会自动链接pthread
<> P> >可以配置GCC和<代码>——启用LIbSTDCXX时间= Rt/COD>,这使得C++标准库链接到-pthread
,因此您的同事可能正在使用这样配置的GCC。该配置选项不是默认的,因为自动链接到不,Boost。线程和GCC的C++线程库在pthy.t/p>上被实现为一个相当薄的层。 所以你有任何线索,为什么它在我同事的Linux机器上使用相同的make文件?也许他的编译器会自动链接pthread
<> P> >可以配置GCC和<代码>——启用LIbSTDCXX时间= Rt/COD>,这使得C++标准库链接到
-pthread
,因此您的同事可能正在使用这样配置的GCC。配置选项不是默认的,因为自动链接到pthread
。好的,谢谢。所以你有任何线索,为什么它在我同事的Linux机器上使用相同的make文件?也许他的编译器会自动链接pthread?如果它是同一个编译器,具有相同的参数,那么它应该是相同的。所以,我要做的第一件事是验证你们两个调用编译器的参数是否相同。有一种方法可以让cmake输出它正在执行的命令。我会使用它并进行比较。您可以使用find_包(需要线程),如下所示:如果我错了,请纠正我,但我非常确定C++11没有自己的线程实现。它是围绕pthread或任何适合平台的东西的包装器。我确信Boost能够处理可移植性问题。@Fredrarson是正确的,C++11不能有自己的线程实现,在某种程度上,它必须依赖底层操作系统提供的线程模型,在Linux的情况下,即pthread
。好的,谢谢。所以你有任何线索,为什么它在我同事的Linux机器上使用相同的make文件?也许他的编译器会自动链接pthread?如果它是同一个编译器,具有相同的参数,那么它应该是相同的。所以,我要做的第一件事是验证你们两个调用编译器的参数是否相同。有一种方法可以让cmake输出它正在执行的命令。我会使用它并进行比较。您可以使用find_包(需要线程),如下所示: