我使用的是 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;
}
Boost
Json
依赖于 container
,这意味着 boost 正在尝试自动包含 libboost_container-vc143-mt-x64-1_84.lib
解决方案是确保您也关闭容器的自动链接,方法是将以下内容添加到 main.cpp 中:
#定义 BOOST_CONTAINER_NO_LIB