2

我试图将 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...
4

2 回答 2

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”

手指交叉,您可能会在编译结束时收到以下消息。

...
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
于 2012-11-08T13:17:37.250 回答
2

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

更新似乎我弄错了:根据文档,上述功能仍然存在,除非定义了 BOOST_SYSTEM_NO_DEPRECATED 。所以检查 Boost.Log 是否定义了它。

于 2012-11-08T09:24:42.100 回答