簡體   English   中英

通過CMake在Visual Studio 2017中使用Boost Asio TCP

[英]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'

這些是准備項目的步驟:

  1. 將VS 2017更新到最新版本(15.7.2)
  2. 下載Boost 1.67.0
  3. 在VS Command Prompt中運行Bootstrap和b2.exe
  4. 在環境變量中定義Boost_ROOT
  5. 在VS中創建CMake項目

然后這是我的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM