Boost 1.52.0上的Boost.Log安装错误

时间:2012-11-08 09:03:29

标签: logging boost

我尝试将Boost.Log编译为boost_1_52_0。一旦我开始执行以下命令:

C:\ boost_1_52_0> bjam --with-log variant = debug define = BOOST_LOG_USE_CHAR define = B OOST_LOG_USE_WINNT6_API阶段--build-type = complete --link = 执行配置检查

编译没有完成,并且生成了较少的lib文件,一旦我编写了一个hello world程序来使用boost.log,就会出现错误“错误2错误LNK1104:无法打开文件”libboost_log-vc100-mt-gd- 1_52.lib”。

以下是输出:

    - has_icu builds           : no

Component configuration:

    - chrono                   : not building
    - context                  : not building
    - date_time                : not building
    - exception                : not building
    - filesystem               : not building
    - graph                    : not building
    - graph_parallel           : not building
    - iostreams                : not building
    - locale                   : not building
    - log                      : building
    - math                     : not building
    - mpi                      : not building
    - program_options          : not building
    - python                   : not building
    - random                   : not building
    - regex                    : not building
    - serialization            : not building
    - signals                  : not building
    - system                   : not building
    - test                     : not building
    - thread                   : not building
    - timer                    : not building
    - wave                     : not building

...patience...
...patience...
...patience...
...found 9657 targets...
...updating 17 targets...
compile-c-c++ bin.v2\libs\log\build\msvc-10.0\debug\threading-multi\text_file_ba
ckend.obj
text_file_backend.cpp
libs\log\src\text_file_backend.cpp(956) : warning C4244: 'initializing' : conver
sion from 'unsigned short' to 'unsigned char', possible loss of data
libs\log\src\text_file_backend.cpp(1197) : error C2039: 'get_generic_category' :
 is not a member of 'boost::system'
        libs\log\src\text_file_backend.cpp(1169) : while compiling class templat
e member function 'void boost::log_mt_nt6::sinks::basic_text_file_backend<CharT>
::do_consume(const boost::log_mt_nt6::basic_record<CharT> &,const std::basic_str
ing<_Elem,_Traits,_Ax> &)'
        with
        [
            CharT=char,
            _Elem=char,
            _Traits=std::char_traits<char>,
            _Ax=std::allocator<char>
        ]
        libs\log\src\text_file_backend.cpp(1439) : see reference to class templa
te instantiation 'boost::log_mt_nt6::sinks::basic_text_file_backend<CharT>' bein
g compiled
        with
        [
            CharT=char
        ]
libs\log\src\text_file_backend.cpp(1197) : error C3861: 'get_generic_category':
identifier not found

    call "C:\Program Files\Microsoft Visual Studio 10.0\VC\vcvarsall.bat" x86 >n
ul
cl /Zm800 -nologo @"bin.v2\libs\log\build\msvc-10.0\debug\threading-multi\text_f
ile_backend.obj.rsp"

...failed compile-c-c++ bin.v2\libs\log\build\msvc-10.0\debug\threading-multi\te
xt_file_backend.obj...
...skipped <pbin.v2\libs\log\build\msvc-10.0\debug\threading-multi>boost_log-vc1
00-mt-gd-1_52.dll for lack of <pbin.v2\libs\log\build\msvc-10.0\debug\threading-
multi>text_file_backend.obj...
...skipped <pbin.v2\libs\log\build\msvc-10.0\debug\threading-multi>boost_log-vc1
00-mt-gd-1_52.lib for lack of <pbin.v2\libs\log\build\msvc-10.0\debug\threading-
multi>text_file_backend.obj...
...skipped <pbin.v2\libs\log\build\msvc-10.0\debug\threading-multi>boost_log-vc1
00-mt-gd-1_52.pdb for lack of <pbin.v2\libs\log\build\msvc-10.0\debug\threading-
multi>text_file_backend.obj...
...skipped <pstage\lib>boost_log-vc100-mt-gd-1_52.dll for lack of <pbin.v2\libs\
log\build\msvc-10.0\debug\threading-multi>boost_log-vc100-mt-gd-1_52.dll...
...skipped <pstage\lib>boost_log-vc100-mt-gd-1_52.lib for lack of <pbin.v2\libs\
log\build\msvc-10.0\debug\threading-multi>boost_log-vc100-mt-gd-1_52.lib...
...skipped <pbin.v2\libs\log\build\msvc-10.0\debug\threading-multi>boost_log_set
up-vc100-mt-gd-1_52.dll for lack of <pbin.v2\libs\log\build\msvc-10.0\debug\thre
ading-multi>boost_log-vc100-mt-gd-1_52.lib...
...skipped <pbin.v2\libs\log\build\msvc-10.0\debug\threading-multi>boost_log_set
up-vc100-mt-gd-1_52.lib for lack of <pbin.v2\libs\log\build\msvc-10.0\debug\thre
ading-multi>boost_log-vc100-mt-gd-1_52.lib...
...skipped <pbin.v2\libs\log\build\msvc-10.0\debug\threading-multi>boost_log_set
up-vc100-mt-gd-1_52.pdb for lack of <pbin.v2\libs\log\build\msvc-10.0\debug\thre
ading-multi>boost_log-vc100-mt-gd-1_52.lib...
...skipped <pstage\lib>boost_log_setup-vc100-mt-gd-1_52.dll for lack of <pbin.v2
\libs\log\build\msvc-10.0\debug\threading-multi>boost_log_setup-vc100-mt-gd-1_52
.dll...
...skipped <pstage\lib>boost_log_setup-vc100-mt-gd-1_52.lib for lack of <pbin.v2
\libs\log\build\msvc-10.0\debug\threading-multi>boost_log_setup-vc100-mt-gd-1_52
.lib...
compile-c-c++ bin.v2\libs\log\build\msvc-10.0\debug\link-static\threading-multi\
text_file_backend.obj
text_file_backend.cpp
libs\log\src\text_file_backend.cpp(956) : warning C4244: 'initializing' : conver
sion from 'unsigned short' to 'unsigned char', possible loss of data
libs\log\src\text_file_backend.cpp(1197) : error C2039: 'get_generic_category' :
 is not a member of 'boost::system'
        libs\log\src\text_file_backend.cpp(1169) : while compiling class templat
e member function 'void boost::log_mt_nt6::sinks::basic_text_file_backend<CharT>
::do_consume(const boost::log_mt_nt6::basic_record<CharT> &,const std::basic_str
ing<_Elem,_Traits,_Ax> &)'
        with
        [
            CharT=char,
            _Elem=char,
            _Traits=std::char_traits<char>,
            _Ax=std::allocator<char>
        ]
        libs\log\src\text_file_backend.cpp(1439) : see reference to class templa
te instantiation 'boost::log_mt_nt6::sinks::basic_text_file_backend<CharT>' bein
g compiled
        with
        [
            CharT=char
        ]
libs\log\src\text_file_backend.cpp(1197) : error C3861: 'get_generic_category':
identifier not found

    call "C:\Program Files\Microsoft Visual Studio 10.0\VC\vcvarsall.bat" x86 >n
ul
cl /Zm800 -nologo @"bin.v2\libs\log\build\msvc-10.0\debug\link-static\threading-
multi\text_file_backend.obj.rsp"

...failed compile-c-c++ bin.v2\libs\log\build\msvc-10.0\debug\link-static\thread
ing-multi\text_file_backend.obj...
...skipped <pbin.v2\libs\log\build\msvc-10.0\debug\link-static\threading-multi>l
ibboost_log-vc100-mt-gd-1_52.lib for lack of <pbin.v2\libs\log\build\msvc-10.0\d
ebug\link-static\threading-multi>text_file_backend.obj...
...skipped <pstage\lib>libboost_log-vc100-mt-gd-1_52.lib for lack of <pbin.v2\li
bs\log\build\msvc-10.0\debug\link-static\threading-multi>libboost_log-vc100-mt-g
d-1_52.lib...
compile-c-c++ bin.v2\libs\log\build\msvc-10.0\debug\link-static\runtime-link-sta
tic\threading-multi\text_file_backend.obj
text_file_backend.cpp
libs\log\src\text_file_backend.cpp(956) : warning C4244: 'initializing' : conver
sion from 'unsigned short' to 'unsigned char', possible loss of data
libs\log\src\text_file_backend.cpp(1197) : error C2039: 'get_generic_category' :
 is not a member of 'boost::system'
        libs\log\src\text_file_backend.cpp(1169) : while compiling class templat
e member function 'void boost::log_mt_nt6::sinks::basic_text_file_backend<CharT>
::do_consume(const boost::log_mt_nt6::basic_record<CharT> &,const std::basic_str
ing<_Elem,_Traits,_Ax> &)'
        with
        [
            CharT=char,
            _Elem=char,
            _Traits=std::char_traits<char>,
            _Ax=std::allocator<char>
        ]
        libs\log\src\text_file_backend.cpp(1439) : see reference to class templa
te instantiation 'boost::log_mt_nt6::sinks::basic_text_file_backend<CharT>' bein
g compiled
        with
        [
            CharT=char
        ]
libs\log\src\text_file_backend.cpp(1197) : error C3861: 'get_generic_category':
identifier not found

    call "C:\Program Files\Microsoft Visual Studio 10.0\VC\vcvarsall.bat" x86 >n
ul
cl /Zm800 -nologo @"bin.v2\libs\log\build\msvc-10.0\debug\link-static\runtime-li
nk-static\threading-multi\text_file_backend.obj.rsp"

...failed compile-c-c++ bin.v2\libs\log\build\msvc-10.0\debug\link-static\runtim
e-link-static\threading-multi\text_file_backend.obj...
...skipped <pbin.v2\libs\log\build\msvc-10.0\debug\link-static\runtime-link-stat
ic\threading-multi>libboost_log-vc100-mt-sgd-1_52.lib for lack of <pbin.v2\libs\
log\build\msvc-10.0\debug\link-static\runtime-link-static\threading-multi>text_f
ile_backend.obj...
...skipped <pstage\lib>libboost_log-vc100-mt-sgd-1_52.lib for lack of <pbin.v2\l
ibs\log\build\msvc-10.0\debug\link-static\runtime-link-static\threading-multi>li
bboost_log-vc100-mt-sgd-1_52.lib...
...failed updating 3 targets...
...skipped 14 targets...

2 个答案:

答案 0 :(得分:3)

经过几个小时的尝试,Boost 1.52.0上的boost filesyetem V3出现了问题,这与boost.log版本1.1不兼容。因此,需要使用“svn”下载Boost.Log v2中继。该命令如下:

svn co https://boost-log.svn.sourceforge.net/svnroot/boost-log boost-log

然后,我执行以下步骤:

  1. 将“boost \ log”文件夹表单boost-log复制到“\ boost_1_52_0 \ boost”文件夹
  2. 将“libs \ log”文件夹从boost-log复制到“\ boost_1_52_0 \ libs”文件夹
  3. 在命令提示符下,转到“boost_1_52_0”文件夹,执行“bootstrap.bat --show-libraries”
  4. 在“boost_1_52_0”文件夹中,执行“b2.exe”
  5. 手指交叉,您可能会在编辑结束时收到以下消息。

    ...
    compile-c-c++ bin.v2\libs\log\build\msvc-10.0\release\link-static\threading-mult
    i\default_filter_factory.obj
    default_filter_factory.cpp
    msvc.archive bin.v2\libs\log\build\msvc-10.0\release\link-static\threading-multi
    \libboost_log_setup-vc100-mt-1_52.lib
    common.copy stage\lib\libboost_log_setup-vc100-mt-1_52.lib
    bin.v2\libs\log\build\msvc-10.0\release\link-static\threading-multi\libboost_log
    _setup-vc100-mt-1_52.lib
            1 file(s) copied.
    ...updated 87 targets...
    
    
    The Boost C++ Libraries were successfully built!
    
    The following directory should be added to compiler include paths:
    
        D:/boost_1_52_0
    
    The following directory should be added to linker library paths:
    
        D:\boost_1_52_0\stage\lib
    

答案 1 :(得分:2)

此版本的Boost.Log使用已弃用的'get_generic_category()'函数,该函数现已从Boost.System中删除。因此,您可以降级Boost,也可以手动修补Boost.Log,将get_generic_category()更改为generic_category()(以及get_system_category()更改为system_category()等。

UPDATE 似乎我错了:根据documentation,除非定义了BOOST_SYSTEM_NO_DEPRECATED,否则上述函数仍然存在。因此,请检查Boost.Log是否定义了它。