Til*_*ill 0 c++ boost cmake c++11
我正在尝试使用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})
Run Code Online (Sandbox Code Playgroud)
该项目应该使用C++ 11并且与平台无关.使用CMakefile进行编译时,我会得到类似的结果
undefined reference to `pthread_join'
Run Code Online (Sandbox Code Playgroud)
我的同事可以毫无问题地编译完全相同的Makefile.
问题:有没有办法迫使CMake或Boost不使用PThreads但C++ 11 Threads保持平台独立?
编辑:服务器编译没有问题,而只有客户端有问题.
有没有办法迫使CMake或Boost不使用PThreads但C++ 11 Threads保持平台独立?
不,Boost.Threads和GCC的C++线程库都是通过Pthreads实现的相当薄的层.
所以你有任何线索,为什么它在我的同事Linux机器上使用相同的make文件?也许他的编译器自动链接pthread?
可以配置GCC --enable-libstdcxx-time=rt,使C++标准库链接到librt和libpthread.这意味着您不需要链接-pthread,因此您的同事可能正在使用这样配置的GCC.该配置选项不是默认选项,因为自动链接libpthread.so会对使用C++标准库某些部分的单线程程序的性能产生负面影响.
| 归档时间: |
|
| 查看次数: |
587 次 |
| 最近记录: |