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
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.
+-----------------------+-------------------------------------------------------------------------------+----------------------------------------+-------------------------+ | | --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.
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)