使用vcpkg在Visual Studio中链接boost时出错

8
我正在尝试完成一个简单的任务,以检查在Windows中开发“Linux应用程序”有多容易。
我正在使用Microsoft的vcpkg来设置头文件和库,以及crow,这是一个使用boost作为驱动项目的C++ HTTP服务器。
源代码很简单。
#include "crow.hpp"

int main()
{
    crow::SimpleApp app;

    CROW_ROUTE(app, "/")
        ([]() {
        return "Hello world!";
    });

    app.port(18080).run();
}

我已经通过vcpkg下载了boost,并使用Visual Studio编写了该项目。
cmake:
cmake_minimum_required (VERSION 3.8)
find_package(boost COMPONENTS  filesystem system thread date_time REQUIRED)
message("this is ${Boost_INCLUDE_DIRS}")
include_directories ("C:\\github.com\\crow\\include")
include_directories(SYSTEM PUBLIC ${Boost_INCLUDE_DIRS})

add_executable (engine "promo-engine-windows.cpp" "promo-engine-windows.h")

target_link_libraries(engine  ${Boost_LIBRARIES})

CMakeSettings.json

{
  "configurations": [
    {
      "name": "x86-Debug",
      "generator": "Visual Studio 15 2017",
      "configurationType": "Debug",
      "buildRoot": "${env.USERPROFILE}\\CMakeBuilds\\${workspaceHash}\\build\\${name}",
      "cmakeCommandArgs": "",
      "buildCommandArgs": "-m -v:minimal",
      "variables": [
        {
          "name": "CMAKE_TOOLCHAIN_FILE",
          "value": "C:\\github.com\\vcpkg\\scripts\\buildsystems\\vcpkg.cmake"
        }
      ]
    }
  ]
}

链接出现错误:
error LNK2019: unresolved external symbol "__declspec(dllimport) class boost::system::error_category const & __cdecl boost::system::system_category(void)" (__imp_?system_category@system@boost@@YAABVerror_category@12@XZ) referenced in function "public: __thiscall boost::system::error_code::error_code(void)" (??0error_code@system@boost@@QAE@XZ) 

error LNK2019: unresolved external symbol "__declspec(dllimport) class boost::system::error_category const & __cdecl boost::system::generic_category(void)" (__imp_?generic_category@system@boost@@YAABVerror_category@12@XZ) referenced in function "public: virtual bool __thiscall boost::system::error_category::std_category::equivalent(class std::error_code const &,int)const " (?equivalent@std_category@error_category@system@boost@@UBE_NABVerror_code@std@@H@Z) 

error LNK2019: unresolved external symbol "__declspec(dllimport) public: __thiscall boost::gregorian::greg_month::greg_month(unsigned short)" (__imp_??0greg_month@gregorian@boost@@QAE@G@Z) referenced in function "public: __thiscall boost::gregorian::date::date(enum boost::date_time::special_values)" (??0date@gregorian@boost@@QAE@W4special_values@date_time@2@@Z) 

error LNK2019: unresolved external symbol "__declspec(dllimport) public: __thiscall boost::gregorian::greg_month::operator unsigned short(void)const " (__imp_??Bgreg_month@gregorian@boost@@QBEGXZ) referenced in function "public: static unsigned int __cdecl boost::date_time::gregorian_calendar_base<struct boost::date_time::year_month_day_base<class boost::gregorian::greg_year,class boost::gregorian::greg_month,class boost::gregorian::greg_day>,unsigned int>::day_number(struct boost::date_time::year_month_day_base<class boost::gregorian::greg_year,class boost::gregorian::greg_month,class boost::gregorian::greg_day> const &)" (?day_number@?$gregorian_calendar_base@U?$year_month_day_base@Vgreg_year@gregorian@boost@@Vgreg_month@23@Vgreg_day@23@@date_time@boost@@I@date_time@boost@@SAIABU?$year_month_day_base@Vgreg_year@gregorian@boost@@Vgreg_month@23@Vgreg_day@23@@23@@Z) 

fatal error LNK1120: 4 unresolved externals 

Build failed

这个问题有人听过吗?我已经花费数小时在解决它。


你尝试过修改你的 CMake 文件以确切地匹配 https://github.com/Microsoft/vcpkg/blob/master/ports/boost/usage 了吗?例如在 find_package 中,包名称应该是 Boost 而不是 boost,添加 REQUIRED 如果没有找到 boost 将导致失败(这可能是你的问题所在?CMake 没有找到 boost 并默默地忽略它)。 - Alan Birtles
@AlanBirtles,您的评论已经足以解决我的问题。如果您有兴趣获得赏金,请回答这个问题。 - cateof
1个回答

5
您应该将您的CMake文件更改为与https://github.com/Microsoft/vcpkg/blob/master/ports/boost/usage精确匹配。
例如,在find_package中,包名称应为Boost而不是boost。如果未找到boost,则添加REQUIRED将使其失败。CMake可能没有找到boost并悄悄地忽略了它。请注意保留HTML标记。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接