![](/img/trans.png)
[英]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.