[英]Using boost asio tcp in visual studio 2017 with CMake
我正在嘗試在帶有Visual Studio 2017的簡單項目中使用CMake並在其中使用boost ASIO TCP,但在運行項目時收到此錯誤:
LNK1104: cannot open file 'libboost_date_time-vc141-mt-gd-x32-1_67.lib'
這些是准備項目的步驟:
然后這是我的CMakeList.text:
cmake_minimum_required (VERSION 3.8)
project (TcpSample)
set(EXEC_NAME "TcpSample")
add_executable (${EXEC_NAME} "TcpSample.cpp" "TcpSample.h")
SET(BOOST_MANDATORY_COMPONENTS system date_time)
set(Boost_USE_STATIC_LIBS ON)
find_package(Boost "1.67.0" COMPONENTS ${BOOST_MANDATORY_COMPONENTS}
REQUIRED)
include_directories(${Boost_INCLUDE_DIRS})
target_link_libraries(${EXEC_NAME} ${Boost_SYSTEM_LIBRARY})
最后是代碼:
#include "TcpSample.h"
#include <boost/asio/ip/tcp.hpp>
using namespace std;
int main()
{
cin.get();
return 0;
}
我需要提及的是,如果我將tcp更改為udp,則沒有錯誤。
將我的評論變成答案:
您缺少將可執行文件鏈接到Boost的date_time
庫的信息。 如您所見,包括其他標頭可能會刪除此鏈接依賴關系。
大多數Boost庫僅是標頭。 但是有些不是,並且需要將庫添加到target_link_libraries
命令。 通過添加命令find_package(Boost "1.67.0" COMPONENTS system date_time REQUIRED)
找到的所有庫,都可以執行一次此操作
target_link_libraries(${EXEC_NAME} ${Boost_LIBRARIES})
或如下添加單個庫
target_link_libraries(${EXEC_NAME} ${Boost_SYSTEM_LIBRARY} ${Boost_DATE_TIME_LIBRARY})
然后,轉到命令include_directories(${Boost_INCLUDE_DIRS})
,該命令將Boost包含目錄添加到CMakeLists.txt
所有目標,並添加到目標特定的target_include_directories(${EXEC_NAME} PUBLIC ${Boost_INCLUDE_DIRS})
。 是否需要鏈接PUBLIC/PRIVATE/INTERFACE
取決於您的庫/ DLL /共享對象是否公開Boost庫中的類型。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.