从1.69升级到1.82后Boost日志链接失败

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

我有 boost 1.69,工作正常,我已将版本升级到 1.82,并且没有更改任何记录器设置或配置。 记录器现在无法与可执行文件链接。

我正在使用 boost 组件 - 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

链接失败。示例-

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]
c++ logging boost
1个回答
0
投票

通过添加正确的定义来实现正确的修复,如下所示 -

# Fix: error LNK2038: mismatch detected for 'boost_log_abi': value 'v2_mt_nt6' doesn't match value 'v2_mt_nt62'
add_definitions(-D_WIN32_WINNT=0x0602)
© www.soinside.com 2019 - 2024. All rights reserved.