Visual Studio 2022构建仅头文件版Boost.JSON出现链接错误问题咨询
Boost JSON仅头文件模式链接错误解决方案
你遇到的LNK1104错误是因为Boost JSON的仅头文件实现依赖Boost Container组件,而MSVC环境下Boost Container默认会启用自动链接机制——即便你定义了BOOST_JSON_NO_LIB,也只是禁用了JSON库的自动链接,Container库的自动链接仍然生效,导致编译器尝试查找对应的库文件。
以下是两种可行的解决办法:
方法一:在代码中添加宏定义
在包含任何Boost头文件之前,添加禁用自动链接的宏。可以选择全局禁用所有Boost库的自动链接,或者仅针对Container库:
全局禁用所有Boost库自动链接
修改main.cpp:
#define BOOST_ALL_NO_LIB #define BOOST_JSON_NO_LIB #include <string> #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 Container自动链接
如果只需要处理当前依赖,也可以单独禁用Container库的自动链接:
#define BOOST_CONTAINER_NO_LIB #define BOOST_JSON_NO_LIB #include <string> #include <boost/json/src.hpp> int main() { std::string json_str = "{\"foo\": 42, \"bar\" : \"quux\"}"; auto json = boost::json::parse(json_str); return 0; }
方法二:通过CMake配置编译定义
无需修改代码,直接在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 ) target_compile_definitions(min_rep_example PRIVATE BOOST_ALL_NO_LIB BOOST_JSON_NO_LIB)
这样配置后,编译器会跳过所有Boost库的自动链接,完全以仅头文件模式使用Boost JSON。
内容的提问来源于stack exchange,提问作者jwezorek
相关产品推荐
相关产品推荐

