Wol*_*ngP 4 c++ boost cmake boost-thread
我想在项目中使用boost :: thread,并且将CMake用作构建工具。但是,即使是非常简单的设置也会导致两个编译器错误:
main.cpp
#include <boost/thread.hpp>
int main()
{
boost::thread t;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
CMakeLists.txt
cmake_minimum_required (VERSION 2.6)
project (ThreadTest)
set(Boost_USE_STATIC_LIBS OFF)
set(Boost_USE_MULTITHREADED ON)
set(Boost_USE_STATIC_RUNTIME OFF)
find_package(Boost 1.58.0 COMPONENTS random thread)
set(SOURCE_DIR src)
set(SOURCE_FILES
${SOURCE_DIR}/main.cpp
)
if(Boost_FOUND)
include_directories(${Boost_INCLUDE_DIRS})
add_executable(test ${SOURCE_FILES})
target_link_libraries(test ${Boost_LIBRARIES})
endif()
Run Code Online (Sandbox Code Playgroud)
我正在使用Boost 1.68.0,CMake可以找到它,并且能够构建正确的Visual Studio项目文件。
我尝试使用boost :: random,它起作用了。
但是,编译上面的程序会导致两个错误消息:
这是error_code.hpp中的引发错误的行
我在boost安装中寻找了文件'libboost_thread-vc14 1 -mt-x64-1_68.lib',但仅找到'boost_1_68_0 \ lib64-msvc-14.0 \ boost_thread-vc14 0 -mt-gd-x64-1_68.lib'
链接器设置包含正确的文件:
所以,我有两个问题:
我在Visual Studio 2017版本15.9和Boost 1.69.0中收到相同的错误消息; 我认为麻烦来自此VS版本,该版本引入了__has_cpp_attribute的某个版本,boost作者期望这些版本仅存在于clang中。
我必须将boost \ system \ detail \ config.hpp第50行从
#if defined(__has_cpp_attribute)
Run Code Online (Sandbox Code Playgroud)
至
#if defined(__clang__) && defined(__has_cpp_attribute)
Run Code Online (Sandbox Code Playgroud)
因为其余的预处理器定义仅与clang有关。
更改boost标头很混乱,但是我还没有找到一个干净的解决方案:(。我希望/ Zc可以停用此新的“功能”(功能测试宏)
| 归档时间: |
|
| 查看次数: |
1557 次 |
| 最近记录: |