[英]Using boost asio tcp in visual studio 2017 with CMake
[英]Using boost::thread with CMake in MS Visual Studio 2017 results in two compiler errors
我想在我的项目中使用boost :: thread,并使用CMake作为构建工具。 但是,即使是非常简单的设置也会导致两个编译器错误:
main.cpp中
#include <boost/thread.hpp>
int main()
{
boost::thread t;
return 0;
}
的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()
我正在使用Boake 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,其中提升作者预计只会出现在clang中。
我不得不改变boost \\ system \\ detail \\ config.hpp第50行
#if defined(__has_cpp_attribute)
至
#if defined(__clang__) && defined(__has_cpp_attribute)
因为剩余的预处理器定义仅与clang相关。
改变提升标题是相当混乱的,但我还没有找到一个干净的解决方案:(。我希望/ Zc有一些切换到deactive这个新的“功能”(功能测试宏)
1)如果你使用
set(Boost_USE_STATIC_LIBS OFF)
并且不提供版本号以进行提升
find_package(Boost COMPONENTS random thread)
因为你使用的是1.68而不是1.58,对吧? 它应该工作。 我可以使用您的设置重现您的错误消息,并使用上述设置。
2)boost CMake包文件根据你选择的编译器搜索一个boost版本,我猜vs 2017的默认值是14.1。 另见这里 。
要解决此问题,请下载并安装正确的预构建二进制文件。
谢谢你的提示!
以下步骤解决了该问题:
1)我为MSVC 14.1安装了boost(预构建二进制文件)
2)我将以下内容添加到CMakeLists.txt:
add_definitions(-DBOOST_ALL_NO_LIB)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.