使用 Visual Studio 将 Boost.JSON 构建为仅标头是否存在一些错误?

问题描述 投票:0回答:1

我使用的是 Visual Studio 2022 v17.10.0 和 Boost 1.84.0。 Boost.JSON 文档说明如下:

仅用作标题;也就是说,消除链接的要求 编程到静态或动态 Boost.JSON 库,只需将 在您的一个新的或现有的源文件中添加以下行: 项目。

#包括

MSVC 用户还必须定义宏 BOOST_JSON_NO_LIB 以禁用自动链接。

我执行上述操作并收到以下链接器错误:

致命错误LNK1104:无法打开文件 'libboost_container-vc143-mt-x64-1_84.lib'

下面是最小的可重现示例:

CMakeLists.txt:

cmake_minimum_required(VERSION 3.16)

project(min_rep_example VERSION 1.0.0 LANGUAGES CXX)

find_package(Boost 1.80 REQUIRED)
include_directories(${Boost_INCLUDE_DIRS}) 

add_executable(min_rep_example
    main.cpp
)

main.cpp:

#include <string>
#define BOOST_JSON_NO_LIB 
#include <boost/json/src.hpp>

int main() {
    std::string json_str = "{\"foo\": 42, \"bar\" : \"quux\"}";
    auto json = boost::json::parse(json_str);
    return 0;
}
c++ visual-studio boost
1个回答
0
投票

Boost

Json
依赖于
container
,这意味着 boost 正在尝试自动包含
libboost_container-vc143-mt-x64-1_84.lib

解决方案是确保您也关闭容器的自动链接,方法是将以下内容添加到 main.cpp 中:

#定义 BOOST_CONTAINER_NO_LIB

© www.soinside.com 2019 - 2024. All rights reserved.