boost lib naming are missing

后端 未结 2 1176
北海茫月
北海茫月 2021-01-22 06:19

I\'ve downloaded boost and built it, and not for the first time, but then things started to seem weird.

At first I got these errors while compiling my project (which use

2条回答
  •  太阳男子
    2021-01-22 06:44

    Regarding the reported error: Name clash for 'libboost_atomic.a':

    I'm just summarizing here the explanation and solution (which @Nitzan Tomer gave briefly above, and for which, @Samidamaru 's answer did not provide a resolution).

    The problem was about --layout specification. See b2 --help for the --layout option.

    On Linux the default layout is system, which means that for all kind of builds, the libraries are created with the schema: libboost_.a (or .lib on Windows). It means that the same file would be created both for debug and release variant. Since Nitzan requested both variants by passing variant=debug,release the created files would overwrite each other. b2 reported this as an error.

    Summary of various layouts and their effect

    +-----------------------+-------------------------------------------------------------------------------+----------------------------------------+-------------------------+
    |                       |                                                                  --layout                                                                        |
    +-----------------------+-------------------------------------------------------------------------------+----------------------------------------+-------------------------+
    |                       | versioned                                                                     | tagged                                 | system                  |
    +-----------------------+-------------------------------------------------------------------------------+----------------------------------------+-------------------------+
    | Library file name:    | libboost_{lib name}-{toolset}[-mt]-{ABI tag}-{ARCH tag}-{boost ver tag}.lib   | libboost_{lib name}[-mt]-{ABI tag}.lib | libboost_{lib name}.lib |
    +-----------------------+-------------------------------------------------------------------------------+----------------------------------------+-------------------------+
    | Header file directory:| include/boost_{boost ver tag}                                                 | include                                | include                 |
    +-----------------------+-------------------------------------------------------------------------------+----------------------------------------+-------------------------+
    | Notes:                | Default on Windows.                                                           | Different toolsets (eg. different      | Default on Linux.       |
    |                       | All variations can be created in the same folder.                             | compiler versions), architecture and   | All variations must be  |
    |                       | See "Library naming" at                                                       | address-model CANNOT be generated in   | created in separate     |
    |                       | https://www.boost.org/doc/libs/1_68_0/more/getting_started/unix-variants.html | the same folder. But relase/debug and  | folders.                |
    |                       | The corresponding b2 options are also indicated on this page.                 | single/multi-threaded can be.          |                         |
    +-----------------------+-------------------------------------------------------------------------------+----------------------------------------+-------------------------+
    

    Of course on Linux the .a and .so post-fixes are used vs. .lib and .dll on Windows. The lib prefix is omitted from DLL names on Windows. On Windows the single-threaded versions can be created only if the runtime-link=static option was set.

    For headers, the "usual" boost directory is still created under the indicated folder.
    It means that if you passed e.g. --prefix=/tools/boost to b2, then the following directory structure is created for the versioned layout:

    /tools/boost
             |
             +--- lib
             |
             +--- include
                      +--- boost_{boost version tag}
                                        |
                                        +--- boost
                                               +--- accumulators
                                               +--- algorithm
                                               etc.
    

    The boost_{boost version tag} (e.g. boost_1_68) intermediate directory is not created for other layouts.

提交回复
热议问题