1============ 2Using libc++ 3============ 4 5.. contents:: 6 :local: 7 8Getting Started 9=============== 10 11If you already have libc++ installed you can use it with clang. 12 13.. code-block:: bash 14 15 $ clang++ -stdlib=libc++ test.cpp 16 $ clang++ -std=c++11 -stdlib=libc++ test.cpp 17 18On OS X and FreeBSD libc++ is the default standard library 19and the ``-stdlib=libc++`` is not required. 20 21.. _alternate libcxx: 22 23If you want to select an alternate installation of libc++ you 24can use the following options. 25 26.. code-block:: bash 27 28 $ clang++ -std=c++11 -stdlib=libc++ -nostdinc++ \ 29 -I<libcxx-install-prefix>/include/c++/v1 \ 30 -L<libcxx-install-prefix>/lib \ 31 -Wl,-rpath,<libcxx-install-prefix>/lib \ 32 test.cpp 33 34The option ``-Wl,-rpath,<libcxx-install-prefix>/lib`` adds a runtime library 35search path. Meaning that the systems dynamic linker will look for libc++ in 36``<libcxx-install-prefix>/lib`` whenever the program is run. Alternatively the 37environment variable ``LD_LIBRARY_PATH`` (``DYLD_LIBRARY_PATH`` on OS X) can 38be used to change the dynamic linkers search paths after a program is compiled. 39 40An example of using ``LD_LIBRARY_PATH``: 41 42.. code-block:: bash 43 44 $ clang++ -stdlib=libc++ -nostdinc++ \ 45 -I<libcxx-install-prefix>/include/c++/v1 46 -L<libcxx-install-prefix>/lib \ 47 test.cpp -o 48 $ ./a.out # Searches for libc++ in the systems library paths. 49 $ export LD_LIBRARY_PATH=<libcxx-install-prefix>/lib 50 $ ./a.out # Searches for libc++ along LD_LIBRARY_PATH 51 52Using libc++experimental and ``<experimental/...>`` 53===================================================== 54 55Libc++ provides implementations of experimental technical specifications 56in a separate library, ``libc++experimental.a``. Users of ``<experimental/...>`` 57headers may be required to link ``-lc++experimental``. 58 59.. code-block:: bash 60 61 $ clang++ -std=c++14 -stdlib=libc++ test.cpp -lc++experimental 62 63Libc++experimental.a may not always be available, even when libc++ is already 64installed. For information on building libc++experimental from source see 65:ref:`Building Libc++ <build instructions>` and 66:ref:`libc++experimental CMake Options <libc++experimental options>`. 67 68Also see the `Experimental Library Implementation Status <http://libcxx.llvm.org/ts1z_status.html>`__ 69page. 70 71.. warning:: 72 Experimental libraries are Experimental. 73 * The contents of the ``<experimental/...>`` headers and ``libc++experimental.a`` 74 library will not remain compatible between versions. 75 * No guarantees of API or ABI stability are provided. 76 77Using libc++ on Linux 78===================== 79 80On Linux libc++ can typically be used with only '-stdlib=libc++'. However 81some libc++ installations require the user manually link libc++abi themselves. 82If you are running into linker errors when using libc++ try adding '-lc++abi' 83to the link line. For example: 84 85.. code-block:: bash 86 87 $ clang++ -stdlib=libc++ test.cpp -lc++ -lc++abi -lm -lc -lgcc_s -lgcc 88 89Alternately, you could just add libc++abi to your libraries list, which in 90most situations will give the same result: 91 92.. code-block:: bash 93 94 $ clang++ -stdlib=libc++ test.cpp -lc++abi 95 96 97Using libc++ with GCC 98--------------------- 99 100GCC does not provide a way to switch from libstdc++ to libc++. You must manually 101configure the compile and link commands. 102 103In particular you must tell GCC to remove the libstdc++ include directories 104using ``-nostdinc++`` and to not link libstdc++.so using ``-nodefaultlibs``. 105 106Note that ``-nodefaultlibs`` removes all of the standard system libraries and 107not just libstdc++ so they must be manually linked. For example: 108 109.. code-block:: bash 110 111 $ g++ -nostdinc++ -I<libcxx-install-prefix>/include/c++/v1 \ 112 test.cpp -nodefaultlibs -lc++ -lc++abi -lm -lc -lgcc_s -lgcc 113 114 115GDB Pretty printers for libc++ 116------------------------------ 117 118GDB does not support pretty-printing of libc++ symbols by default. Unfortunately 119libc++ does not provide pretty-printers itself. However there are 3rd 120party implementations available and although they are not officially 121supported by libc++ they may be useful to users. 122 123Known 3rd Party Implementations Include: 124 125* `Koutheir's libc++ pretty-printers <https://github.com/koutheir/libcxx-pretty-printers>`_. 126