Boost Log从1.69升级至1.82后出现链接失败问题
Boost 1.82日志组件链接失败问题
原本使用Boost 1.69版本时日志功能运行正常,升级至1.82版本后,未修改任何日志器设置或配置,但出现日志器无法与可执行文件链接的问题。已确认log和log_setup组件配置正确并加入target_link_libraries。
链接库列表
C:/vcpkg/installed/x64-windows/lib/boost_locale-vc140-mt.lib debugC:/vcpkg/installed/x64-windows/debug/lib/boost_locale-vc140-mt-gd.lib optimizedC:/vcpkg/installed/x64-windows/lib/boost_filesystem-vc140-mt.lib debugC:/vcpkg/installed/x64-windows/debug/lib/boost_filesystem-vc140-mt-gd.lib optimizedC:/vcpkg/installed/x64-windows/lib/boost_log-vc140-mt.lib debugC:/vcpkg/installed/x64-windows/debug/lib/boost_log-vc140-mt-gd.lib optimizedC:/vcpkg/installed/x64-windows/lib/boost_log_setup-vc140-mt.lib debugC:/vcpkg/installed/x64-windows/debug/lib/boost_log_setup-vc140-mt-gd.lib optimizedC:/vcpkg/installed/x64-windows/lib/boost_unit_test_framework-vc140-mt.lib debugC:/vcpkg/installed/x64-windows/debug/lib/boost_unit_test_framework-vc140-mt-gd.lib optimizedC:/vcpkg/installed/x64-windows/lib/boost_thread-vc140-mt.lib debugC:/vcpkg/installed/x64-windows/debug/lib/boost_thread-vc140-mt-gd.lib optimizedC:/vcpkg/installed/x64-windows/lib/boost_regex-vc140-mt.lib debugC:/vcpkg/installed/x64-windows/debug/lib/boost_regex-vc140-mt-gd.lib optimizedC:/vcpkg/installed/x64-windows/lib/boost_chrono-vc140-mt.lib debugC:/vcpkg/installed/x64-windows/debug/lib/boost_chrono-vc140-mt-gd.lib optimizedC:/vcpkg/installed/x64-windows/lib/boost_atomic-vc140-mt.lib debugC:/vcpkg/installed/x64-windows/debug/lib/boost_atomic-vc140-mt-gd.lib
CMake配置
set(BOOST_REQUIRED_VERSION 1.82.0) set(BOOST_COMPONENTS locale filesystem log log_setup) if (WITH_TESTS) set(BOOST_COMPONENTS ${BOOST_COMPONENTS} unit_test_framework) endif() find_package(Boost ${BOOST_REQUIRED_VERSION} REQUIRED COMPONENTS ${BOOST_COMPONENTS})
测试代码示例
BOOST_AUTO_TEST_CASE(LoggingTest) { init(); logging::add_common_attributes(); using namespace logging::trivial; src::severity_logger< severity_level > lg; BOOST_LOG_SEV(lg, trace) << "A trace severity message"; BOOST_LOG_SEV(lg, debug) << "A debug severity message"; BOOST_LOG_SEV(lg, info) << "An informational severity message"; BOOST_LOG_SEV(lg, warning) << "A warning severity message"; BOOST_LOG_SEV(lg, error) << "An error severity message"; BOOST_LOG_SEV(lg, fatal) << "A fatal severity message"; }
链接错误信息
[build] C:\Users\Sagun Khosla\Desktop\Repos\horizon\out\install\Horizon-Tests\test\Release\LoggingTest.exe : fatal error LNK1120: 56 unresolved externals [C:\Users\Sagun Khosla\Desktop\Repos\horizon\out\build\Horizon-Tests\src\Tests\LoggingTest.vcxproj]
目标链接配置
target_link_libraries(auth PUBLIC ${Boost_LIBRARIES} networking ${Readline_LIBRARY} ${LUA_LIBRARIES} OpenSSL::SSL )
具体未解析符号示例
[build] Logger.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) struct boost::log::v2_mt_nt6::aux::format_description<char> __cdecl boost::log::v2_mt_nt6::aux::parse_format<char>(char const *,char const *)" (__imp_??$parse_format@D@aux@v2_mt_nt6@log@boost@@YA?AU?$format_description@D@0123@PEBD0@Z) referenced in function "public: __cdecl boost::log::v2_mt_nt6::aux::basic_format<char>::basic_format<char>(char const *)" (??0?$basic_format@D@aux@v2_mt_nt6@log@boost@@QEAA@PEBD@Z) [C:\Users\Sagun Khosla\Desktop\Repos\horizon\out\build\Horizon-Tests\src\Tests\LoggingTest.vcxproj]
解决建议
- 校验ABI与编译选项一致性:确认vcpkg安装的Boost库编译选项(MT/MD、debug/release)与项目完全匹配,Boost 1.69到1.82存在ABI变更,必须保证库和项目的编译参数统一。
- 补充缺失的依赖组件:尝试在
BOOST_COMPONENTS中添加date_time和serialization组件,高版本Boost.Log可能新增了这些依赖,重新执行find_package。 - 清理CMake缓存:删除build目录下的
CMakeCache.txt和生成的项目文件,重新运行CMake配置,避免旧路径缓存导致的问题。 - 定义动态链接宏:如果使用动态Boost库,在项目中添加预定义宏
BOOST_LOG_DYN_LINK,确保符号导入正确。 - 重装Boost库:通过vcpkg重新安装Boost 1.82,命令:
vcpkg install boost-log:x64-windows,确保库文件完整无损坏。
内容的提问来源于stack exchange,提问作者SagunKho
相关产品推荐
相关产品推荐

