boost lib naming are missing

时间秒杀一切 提交于 2019-12-02 02:28:01

In your boost repo, make sure you've run ./bootstrap.sh with --prefix=<install directory> if you want it in a non default location. You don't need this argument though.

You can run run the ./b2 command from the same directory after this to install boost once again with the --prefix=<install directory> option if required. You may have to remove all previous build files from your build/install directory before trying to do this.

Also, make sure you have the correct version for your machine. I used http://downloads.sourceforge.net/boost/boost_1_58_0.tar.bz2 for mine (OpenSUSE 13.1 64 bit)

Regarding the reported error: Name clash for '<pstage/lib>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_<library-name>.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.

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!