Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/139.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 强制Boost使用C++;11线_C++_Boost_C++11_Cmake - Fatal编程技术网

C++ 强制Boost使用C++;11线

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

我试图在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( 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++标准库链接到LabTe>代码>和 LIPPtxs>代码>。这意味着您不需要链接到
-pthread
,因此您的同事可能正在使用这样配置的GCC。该配置选项不是默认的,因为自动链接到 LBPthTo..S/<代码>对使用C++标准库的某些部分的单线程程序的性能产生负面影响。 有没有办法强迫CMake或Boost不使用PThreads,而是使用C++11线程来保持平台独立性

不,Boost。线程和GCC的C++线程库在pthy.t/p>上被实现为一个相当薄的层。 所以你有任何线索,为什么它在我同事的Linux机器上使用相同的make文件?也许他的编译器会自动链接pthread


<> P> >可以配置GCC和<代码>——启用LIbSTDCXX时间= Rt/COD>,这使得C++标准库链接到LabTe>代码>和 LIPPtxs>代码>。这意味着您不需要链接到
-pthread
,因此您的同事可能正在使用这样配置的GCC。配置选项不是默认的,因为自动链接到 LBPthTo..S/<代码>对使用C++标准库的某些部分的单线程程序的性能产生负面影响。

如果我错了请更正我,但我非常肯定C++ 11没有自己的线程实现。它是围绕pthread或任何适合平台的东西的包装器。我确信Boost能够处理可移植性问题。@Fredrarson是正确的,C++11不能有自己的线程实现,在某种程度上,它必须依赖底层操作系统提供的线程模型,在Linux的情况下,即
pthread
。好的,谢谢。所以你有任何线索,为什么它在我同事的Linux机器上使用相同的make文件?也许他的编译器会自动链接pthread?如果它是同一个编译器,具有相同的参数,那么它应该是相同的。所以,我要做的第一件事是验证你们两个调用编译器的参数是否相同。有一种方法可以让cmake输出它正在执行的命令。我会使用它并进行比较。您可以使用find_包(需要线程),如下所示:如果我错了,请纠正我,但我非常确定C++11没有自己的线程实现。它是围绕pthread或任何适合平台的东西的包装器。我确信Boost能够处理可移植性问题。@Fredrarson是正确的,C++11不能有自己的线程实现,在某种程度上,它必须依赖底层操作系统提供的线程模型,在Linux的情况下,即
pthread
。好的,谢谢。所以你有任何线索,为什么它在我同事的Linux机器上使用相同的make文件?也许他的编译器会自动链接pthread?如果它是同一个编译器,具有相同的参数,那么它应该是相同的。所以,我要做的第一件事是验证你们两个调用编译器的参数是否相同。有一种方法可以让cmake输出它正在执行的命令。我会使用它并进行比较。您可以使用find_包(需要线程),如下所示: