Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Which Boost libraries are header-only?

Tags:

c++

boost

Which Boost libraries are header-only? And which require building libraries?

Does such a list exist?

like image 650
dangerousdave Avatar asked Nov 28 '12 11:11

dangerousdave


People also ask

Are all Boost libraries header-only?

Most Boost libraries are header-only: they consist entirely of header files containing templates and inline functions, and require no separately-compiled library binaries or special treatment when linking. The only Boost libraries that must be built separately are: Boost.

Is Boost process header-only?

Boost Process is header-only, so you don't have to compile it separately.

Is Boost thread header-only?

Boost. DateTime: This dependency is mandatory, but even if Boost. DateTime is a non header-only library Boost. Thread uses only parts that are header-only, so in principle you should not need to link with the library.

Is Boost ASIO header-only?

By default, Boost. Asio is a header-only library. However, some developers may prefer to build Boost. Asio using separately compiled source code.


2 Answers

The list of libraries that require building is here for Unix-like systems, and here for Windows.

For the current release, 1.58, both are the same:

  • Boost.Chrono
  • Boost.Context
  • Boost.Filesystem
  • Boost.GraphParallel
  • Boost.IOStreams
  • Boost.Locale
  • Boost.MPI
  • Boost.ProgramOptions
  • Boost.Python
  • Boost.Regex
  • Boost.Serialization
  • Boost.Signals
  • Boost.System
  • Boost.Thread
  • Boost.Timer
  • Boost.Wave

A few libraries have optional separately-compiled binaries:

  • Boost.DateTime
  • Boost.Graph
  • Boost.Math
  • Boost.Random
  • Boost.Test
  • Boost.Exception

Note that some libraries may depend on these (for example, Asio depends on System as pointed out in the comments), so you may still need to build something even if the library you want isn't on the list.

like image 141
Mike Seymour Avatar answered Sep 19 '22 03:09

Mike Seymour


Actually, even ./bootstrap.sh --show-libraries is somewhat incorrect too, because some libraries depend on that listed libraries.

It is possible to get list of header-only libraries with the Boost BCP tool, launching the tool on every library and removing those linking any binaries. That is what was done in How To Build Header Only Boost.

For Boost 1.67.0 the resulting list was:

accumulators align any array assert assign bind callable_traits circular_buffer compatibility concept_check config container_hash conversion convert core crc detail disjoint_sets dynamic_bitset endian foreach format function functional function_types fusion geometry gil hana heap hof icl integer interprocess intrusive io iterator lambda lexical_cast locale local_function logic metaparse move mp11 mpl msm multi_array multi_index optional phoenix poly_collection polygon predef preprocessor property_tree proto ptr_container qvm ratio rational scope_exit signals2 smart_ptr sort static_assert throw_exception tokenizer tti tuple type_index typeof type_traits units unordered utility uuid variant vmd winapi xpressive 
like image 25
Andrew Selivanov Avatar answered Sep 22 '22 03:09

Andrew Selivanov