Я использую Visual Studio 2022 v17.10.0 и Boost 1.84.0. В документации Boost.JSON говорится следующее:
Использовать только как заголовок; то есть исключить необходимость связывания программу в статическую или динамическую библиотеку Boost.JSON, просто поместите следующую строку ровно в одном новом или существующем исходном файле в вашем проект.
#include <boost/json/src.hpp>
Пользователи 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
)
основной.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;
}
нет, это не баг, возможно вы просто неправильно его используете, покажите пожалуйста минимальный воспроизводимый пример
@NathanOliver последний.
Boost Json
зависит от container
, а это значит, что Boost пытается автоматически включить libboost_container-vc143-mt-x64-1_84.lib
Решение состоит в том, чтобы убедиться, что вы также отключили автоматическое связывание для контейнера, добавив следующее в ваш main.cpp:
#define BOOST_CONTAINER_NO_LIB
у тебя есть
#include <boost/json/src.hpp> #define BOOST_JSON_NO_LIB
или#define BOOST_JSON_NO_LIB #include <boost/json/src.hpp>
?