Boost C++ Libraries of the most highly regarded and expertly designed C++ library projects in the world. Herb Sutter and Andrei Alexandrescu, C++ Coding Standards

This is the documentation for a snapshot of the develop branch, built from commit dfc250d1e7.

Configuration and Build

MinGW and MinGW-w64 specific notes
Windows deployment and symbol files

By default Boost.Stacktrace is a header-only library, but you may change that and use the following macros to improve build times or to be able to tune library without recompiling your project:

Table 36.1. Link macros

Macro name



Disable header-only build and require linking with shared or static library that contains the tracing implementation. If BOOST_ALL_DYN_LINK is defined, then link with shared library.


Disable header-only build and require linking with shared library that contains tracing implementation.

In header only mode library could be tuned by macro. If one of the link macro from above is defined, you have to manually link with one of the libraries:

Table 36.2. Config

Macro name or default




Uses debug information [a]

Uses dynamic exports information [b]

default for MSVC, Intel on Windows, MinGW-w64 / BOOST_STACKTRACE_USE_WINDBG


Uses COM to show debug info. May require linking with ole32 and dbgeng.

MSVC, MinGW-w64, Intel on Windows



default for other platforms


Uses compiler intrinsics to collect stacktrace and if possible ::dladdr to show information about the symbol. Requires linking with libdl library on POSIX platforms.

Any compiler on POSIX or MinGW





Uses COM to show debug info and caches COM instances in TLS for better performance. Useful only for cases when traces are gathered very often. [c] May require linking with ole32 and dbgeng.

MSVC, Intel on Windows





Requires linking with libdl on POSIX and libbacktrace libraries. libbacktrace is probably already installed in your system[d], or built into your compiler.

Otherwise (if you are a MinGW/MinGW-w64 user for example) it can be downloaded from here or from here.

Any compiler on POSIX, or MinGW, or MinGW-w64





Use addr2line program to retrieve stacktrace. Requires linking with libdl library and ::fork system call. Macro BOOST_STACKTRACE_ADDR2LINE_LOCATION must be defined to the absolute path to the addr2line executable if it is not located in /usr/bin/addr2line.

Any compiler on POSIX





Use this if you wish to disable backtracing. stacktrace::size() with that macro always returns 0.




[a] This will provide more readable backtraces with source code locations if the binary is built with debug information.

[b] This will provide readable function names in backtrace for functions that are exported by the binary. Compiling with -rdynamic flag, without -fisibility=hidden or marking functions as exported produce a better stacktraces.

[c] This may affect other components of your program that use COM, because this mode calls the CoInitializeEx(0, COINIT_MULTITHREADED) on first use and does not call ::CoUninitialize(); until the current thread is destroyed.

[d] If you are using Clang with libstdc++ you could get into troubles of including <backtrace.h>, because on some platforms Clang does not search for headers in the GCC's include paths and any attempt to add GCC's include path leads to linker errors. To explicitly specify a path to the <backtrace.h> header you could define the BOOST_STACKTRACE_BACKTRACE_INCLUDE_FILE to a full path to the header. For example on Ubuntu Xenial use the command line option -DBOOST_STACKTRACE_BACKTRACE_INCLUDE_FILE=</usr/lib/gcc/x86_64-linux-gnu/5/include/backtrace.h> while building with Clang.


MinGW-w64 and MinGW (without -w64) users have to install libbacktrace for getting better stacktraces. Follow the instruction:

Let's assume that you've installed MinGW into C:\MinGW and downloaded libbacktrace sources into C:\libbacktrace-master

  • Configure & build libbacktrace from console:
    • C:\MinGW\msys\1.0\bin\sh.exe
    • cd /c/libbacktrace-master
    • ./configure CC=/c/MinGW/bin/gcc.exe CXX=/c/MinGW/bin/g++.exe
    • make
    • ./libtool --mode=install /usr/bin/install -c '/c/libbacktrace-master'
  • Add info to the project-config.jam in the Boost folder:
    • using gcc : 6 : "C:\MinGW\bin\g++.exe" : <compileflags>-I"C:\libbacktrace-master\" <linkflags>-L"C:\libbacktrace-master\" ;
  • Now you can use a header only version by defining BOOST_STACKTRACE_USE_BACKTRACE for your project or build the stacktrace library from Boost folder:
    • b2.exe toolset=gcc-6 --with-stacktrace

Function names may not be resolved after deployment of your application to a different system.

There are multiple ways to deal with that issue if you distribute PDB files along with your application: