1<section xmlns="http://docbook.org/ns/docbook" version="5.0" 2 xml:id="manual.intro.setup.configure" xreflabel="Configuring"> 3<?dbhtml filename="configure.html"?> 4 5<info><title>Configure</title> 6 <keywordset> 7 <keyword>ISO C++</keyword> 8 <keyword>configure</keyword> 9 <keyword>options</keyword> 10 </keywordset> 11</info> 12 13 14 15<para> 16 When configuring libstdc++, you'll have to configure the entire 17 <emphasis>gccsrcdir</emphasis> directory. Consider using the 18 toplevel gcc configuration option 19 <literal>--enable-languages=c++</literal>, which saves time by only 20 building the C++ toolchain. 21</para> 22 23<para> 24 Here are all of the configure options specific to libstdc++. Keep 25 in mind that 26 <!-- This SECnn should be the "Choosing Package Options" section. --> 27 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://sourceware.org/autobook/autobook/autobook_14.html">they 28 all have opposite forms as well</link> (enable/disable and 29 with/without). The defaults are for the <emphasis>current 30 development sources</emphasis>, which may be different than those 31 for released versions. 32</para> 33<para>The canonical way to find out the configure options that are 34 available for a given set of libstdc++ sources is to go to the 35 source directory and then type: <command>./configure --help</command>. 36</para> 37 38<variablelist> 39 <varlistentry><term><code>--enable-multilib</code>[default]</term> 40 <listitem><para>This is part of the generic multilib support for building cross 41 compilers. As such, targets like "powerpc-elf" will have 42 libstdc++ built many different ways: "-msoft-float" 43 and not, etc. A different libstdc++ will be built for each of 44 the different multilib versions. This option is on by default. 45 </para> 46 </listitem></varlistentry> 47 48 <varlistentry><term><code>--enable-version-specific-runtime-libs</code></term> 49 <listitem><para>Specify that run-time libraries should be installed in the 50 compiler-specific subdirectory (i.e., 51 <code>${libdir}/gcc-lib/${target_alias}/${gcc_version}</code>) 52 instead of <code>${libdir}</code>. This option is useful if you 53 intend to use several versions of gcc in parallel. In addition, 54 libstdc++'s include files will be installed in 55 <code>${libdir}/gcc-lib/${target_alias}/${gcc_version}/include/g++</code>, 56 unless you also specify 57 <literal>--with-gxx-include-dir=</literal><filename class="directory">dirname</filename> during configuration. 58 </para> 59 </listitem></varlistentry> 60 61 <varlistentry><term><code>--with-gxx-include-dir=<include-files dir></code></term> 62 <listitem><para>Adds support for named libstdc++ include directory. For instance, 63 the following puts all the libstdc++ headers into a directory 64 called "4.4-20090404" instead of the usual 65 "c++/(version)". 66 </para> 67 <programlisting> 68 --with-gxx-include-dir=/foo/H-x86-gcc-3-c-gxx-inc/include/4.4-20090404</programlisting> </listitem></varlistentry> 69 70 <varlistentry><term><code>--enable-cstdio</code></term> 71 <listitem><para>This is an abbreviated form of <code>'--enable-cstdio=stdio'</code> 72 (described next). 73 </para> 74 </listitem></varlistentry> 75 76 <varlistentry><term><code>--enable-cstdio=OPTION</code></term> 77 <listitem><para>Select a target-specific I/O package. At the moment, the only 78 choice is to use 'stdio', a generic "C" abstraction. 79 The default is 'stdio'. This option can change the library ABI. 80 </para> 81 </listitem></varlistentry> 82 83 <varlistentry><term><code>--enable-clocale</code></term> 84 <listitem><para>This is an abbreviated form of <code>'--enable-clocale=generic'</code> 85 (described next). 86 </para> 87 </listitem></varlistentry> 88 89 <varlistentry><term><code>--enable-clocale=OPTION</code></term> 90 <listitem><para>Select a target-specific underlying locale package. The 91 choices are 'ieee_1003.1-2001' to specify an X/Open, Standard Unix 92 (IEEE Std. 1003.1-2001) model based on langinfo/iconv/catgets, 93 'gnu' to specify a model based on functionality from the GNU C 94 library (langinfo/iconv/gettext) (from <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="https://www.gnu.org/software/libc/">glibc</link>, the GNU C 95 library), 'generic' to use a generic "C" abstraction which consists 96 of "C" locale info, 'newlib' to specify the Newlib C library model 97 which only differs from the 'generic' model in the handling of 98 ctype, or 'darwin' which omits the <type>wchar_t</type> specializations 99 needed by the 'generic' model. 100 </para> 101 102 <para>If not explicitly specified, the configure process tries 103 to guess the most suitable package from the choices above. The 104 default is 'generic'. On glibc-based systems of sufficient 105 vintage (2.3 and newer), 'gnu' is automatically selected. On newlib-based 106 systems (<code>'--with_newlib=yes'</code>) and OpenBSD, 'newlib' is 107 automatically selected. On Mac OS X 'darwin' is automatically selected. 108 This option can change the library ABI. 109 </para> 110 </listitem></varlistentry> 111 112 <varlistentry><term><code>--enable-libstdcxx-allocator</code></term> 113 <listitem><para>This is an abbreviated form of 114 <code>'--enable-libstdcxx-allocator=auto'</code> (described 115 next). 116 </para> 117 </listitem></varlistentry> 118 119 <varlistentry><term><code>--enable-libstdcxx-allocator=OPTION </code></term> 120 <listitem><para>Select a target-specific underlying std::allocator. The 121 choices are 'new' to specify a wrapper for new, and 'malloc' to 122 specify a wrapper for malloc. 123 See <xref linkend="allocator.ext"/> for more information. 124 This option can change the library ABI. 125 </para> 126 </listitem></varlistentry> 127 128 <varlistentry><term><code>--enable-cheaders=OPTION</code></term> 129 <listitem><para>This allows the user to define the approach taken for C header 130 compatibility with C++. Options are c, c_std, and c_global. 131 These correspond to the source directory's include/c, 132 include/c_std, and include/c_global, and may also include 133 include/c_compatibility. The default is 'c_global'. 134 </para> 135 </listitem></varlistentry> 136 137 <varlistentry><term><code>--enable-threads</code></term> 138 <listitem><para>This is an abbreviated form of <code>'--enable-threads=yes'</code> 139 (described next). 140 </para> 141 </listitem></varlistentry> 142 143 <varlistentry><term><code>--enable-threads=OPTION</code></term> 144 <listitem><para>Select a threading library. A full description is 145 given in the 146 general <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://gcc.gnu.org/install/configure.html">compiler 147 configuration instructions</link>. This option can change the 148 library ABI. 149 </para> 150 </listitem></varlistentry> 151 152 <varlistentry><term><code>--enable-libstdcxx-threads</code></term> 153 <listitem><para>Enable C++11 threads support. If not explicitly specified, 154 the configure process enables it if possible. This 155 option can change the library ABI. 156 </para> 157 </listitem></varlistentry> 158 159 <varlistentry><term><code>--enable-libstdcxx-time</code></term> 160 <listitem><para>This is an abbreviated form of 161 <code>'--enable-libstdcxx-time=yes'</code>(described next). 162 </para> 163 </listitem></varlistentry> 164 165 <varlistentry><term><code>--enable-libstdcxx-time=OPTION</code></term> 166 <listitem><para>Enables link-type checks for the availability of the 167 <function>clock_gettime</function> clocks, used in the implementation 168 of [time.clock], and of the <function>nanosleep</function> and 169 <function>sched_yield</function> functions, used in the 170 implementation of [thread.thread.this] of the 2011 ISO C++ standard. 171 The choice OPTION=yes checks for the availability of the facilities 172 in libc. OPTION=rt also checks in 173 librt (and, if it's needed, links to it). Note that linking to librt 174 is not always desirable because for glibc it requires linking to 175 libpthread too, which causes all reference counting to use atomic 176 operations, resulting in a potentially large overhead for 177 single-threaded programs. OPTION=no skips the tests completely. 178 The default is OPTION=auto, which skips the checks and enables the 179 features only for targets known to support them. 180 For Linux targets, if <function>clock_gettime</function> is not used 181 then the [time.clock] implementation will use a system call to access 182 the realtime and monotonic clocks, which is significantly slower than 183 the C library's <function>clock_gettime</function> function. 184 </para> 185 </listitem></varlistentry> 186 187 <varlistentry><term><code>--enable-libstdcxx-debug</code></term> 188 <listitem><para>Build separate debug libraries in addition to what is normally built. 189 By default, the debug libraries are compiled with 190 <code> CXXFLAGS='-g3 -O0 -fno-inline'</code> 191 , are installed in <code>${libdir}/debug</code>, and have the 192 same names and versioning information as the non-debug 193 libraries. This option is off by default. 194 </para> 195 <para>Note this make command, executed in 196 the build directory, will do much the same thing, without the 197 configuration difference and without building everything twice: 198 <code>make CXXFLAGS='-g3 -O0 -fno-inline' all</code> 199 </para> 200 </listitem></varlistentry> 201 202 <varlistentry><term><code>--enable-libstdcxx-debug-flags=FLAGS</code></term> 203 204 <listitem><para>This option is only valid when 205 <code>--enable-libstdcxx-debug</code> 206 is also specified, and applies to the debug builds only. With 207 this option, you can pass a specific string of flags to the 208 compiler to use when building the debug versions of libstdc++. 209 FLAGS is a quoted string of options, like 210 </para> 211 <programlisting> 212 --enable-libstdcxx-debug-flags='-g3 -O1 -fno-inline'</programlisting> 213 </listitem></varlistentry> 214 215 <varlistentry><term><code>--enable-cxx-flags=FLAGS</code></term> 216 <listitem><para>With this option, you can pass a string of -f (functionality) 217 flags to the compiler to use when building libstdc++. This 218 option can change the library ABI. FLAGS is a quoted string of 219 options, like 220 </para> 221 <programlisting> 222 --enable-cxx-flags='-fvtable-gc -fomit-frame-pointer -ansi'</programlisting> 223 <para> 224 Note that the flags don't necessarily have to all be -f flags, 225 as shown, but usually those are the ones that will make sense 226 for experimentation and configure-time overriding. 227 </para> 228 <para>The advantage of --enable-cxx-flags over setting CXXFLAGS in 229 the 'make' environment is that, if files are automatically 230 rebuilt, the same flags will be used when compiling those files 231 as well, so that everything matches. 232 </para> 233 <para>Fun flags to try might include combinations of 234 </para> 235 <programlisting> 236 -fstrict-aliasing 237 -fno-exceptions 238 -ffunction-sections 239 -fvtable-gc</programlisting> 240 <para>and opposite forms (-fno-) of the same. Tell us (the libstdc++ 241 mailing list) if you discover more! 242 </para> 243 </listitem></varlistentry> 244 245 <varlistentry><term><code>--enable-c99</code></term> 246 <listitem><para>The <type>long long</type> type was introduced in C99, along 247 with many other functions for wide characters, and math 248 classification macros, etc. If enabled, all C99 functions not 249 specified by the C++ standard will be put into <code>namespace 250 __gnu_cxx</code>, and then all these names will 251 be injected into namespace std, so that C99 functions can be 252 used "as if" they were in the C++ standard (as they 253 will eventually be in some future revision of the standard, 254 without a doubt). By default, C99 support is on, assuming the 255 configure probes find all the necessary functions and bits 256 necessary. This option can change the library ABI. 257 </para> 258 </listitem></varlistentry> 259 260 <varlistentry><term><code>--enable-wchar_t</code>[default]</term> 261 <listitem><para>Template specializations for the <type>wchar_t</type> type are 262 required for wide character conversion support. Disabling 263 wide character specializations may be expedient for initial 264 porting efforts, but builds only a subset of what is required by 265 ISO, and is not recommended. By default, this option is on. 266 This option can change the library ABI. 267 </para> 268 </listitem></varlistentry> 269 270 <varlistentry><term><code>--enable-long-long </code></term> 271 <listitem><para>The <type>long long</type> type was introduced in C99. It is 272 provided as a GNU extension to C++98 in g++. This flag builds 273 support for "long long" into the library (specialized 274 templates and the like for iostreams). This option is on by default: 275 if enabled, users will have to either use the new-style "C" 276 headers by default (i.e., <cmath> not <math.h>) 277 or add appropriate compile-time flags to all compile lines to 278 allow "C" visibility of this feature (on GNU/Linux, 279 the flag is -D_ISOC99_SOURCE, which is added automatically via 280 CPLUSPLUS_CPP_SPEC's addition of _GNU_SOURCE). 281 This option can change the library ABI. 282 </para> 283 </listitem></varlistentry> 284 285 <varlistentry><term><code>--enable-fully-dynamic-string</code></term> 286 <listitem><para>This option enables a special version of basic_string avoiding 287 the optimization that allocates empty objects in static memory. 288 Mostly useful together with shared memory allocators, see PR 289 libstdc++/16612 for details. 290 </para> 291 </listitem></varlistentry> 292 293 <varlistentry><term><code>--enable-concept-checks</code></term> 294 <listitem><para>This turns on additional compile-time checks for instantiated 295 library templates, in the form of specialized templates described in 296 the <link linkend="std.diagnostics.concept_checking">Concept 297 Checking</link> section. They 298 can help users discover when they break the rules of the STL, before 299 their programs run. These checks are based on C++03 rules and some of 300 them are not compatible with correct C++11 code. 301 </para> 302 </listitem></varlistentry> 303 304 <varlistentry><term><code>--enable-symvers[=style]</code></term> 305 306 <listitem><para>In 3.1 and later, tries to turn on symbol versioning in the 307 shared library (if a shared library has been 308 requested). Values for 'style' that are currently supported 309 are 'gnu', 'gnu-versioned-namespace', 'darwin', 310 'darwin-export', and 'sun'. Both gnu- options require that a recent 311 version of the GNU linker be in use. Both darwin options are 312 equivalent. With no style given, the configure script will try 313 to guess correct defaults for the host system, probe to see if 314 additional requirements are necessary and present for 315 activation, and if so, will turn symbol versioning on. This 316 option can change the library ABI. 317 </para> 318 319 </listitem></varlistentry> 320 321 <varlistentry><term><code>--enable-libstdcxx-visibility</code></term> 322 <listitem><para> In 4.2 and later, enables or disables visibility 323 attributes. If enabled (as by default), and the compiler seems 324 capable of passing the simple sanity checks thrown at it, adjusts 325 items in namespace std, namespace std::tr1, namespace std::tr2, 326 and namespace __gnu_cxx to have <code>visibility ("default")</code> 327 so that -fvisibility options can be used without affecting the 328 normal external-visibility of namespace std entities. 329 Prior to 4.7 this option was spelled <code>--enable-visibility</code>. 330 </para> 331 </listitem></varlistentry> 332 333 <varlistentry><term><code>--enable-libstdcxx-pch</code></term> 334 <listitem><para>In 3.4 and later, tries to turn on the generation of 335 stdc++.h.gch, a pre-compiled file including all the standard 336 C++ includes. If enabled (as by default), and the compiler 337 seems capable of passing the simple sanity checks thrown at 338 it, try to build stdc++.h.gch as part of the make process. 339 In addition, this generated file is used later on (by appending <code> 340 --include bits/stdc++.h </code> to CXXFLAGS) when running the 341 testsuite. 342 </para> 343 </listitem></varlistentry> 344 345 346 <varlistentry><term><code>--enable-extern-template</code>[default]</term> 347 <listitem><para>Use extern template to pre-instantiate all required 348 specializations for certain types defined in the standard libraries. 349 These types include <classname>string</classname> and dependents like 350 <classname>char_traits</classname>, the templatized IO classes, 351 <classname>allocator</classname>, and others. 352 Disabling means that implicit 353 template generation will be used when compiling these types. By 354 default, this option is on. This option can change the library ABI. 355 </para> 356 </listitem></varlistentry> 357 358 <varlistentry><term><code>--disable-hosted-libstdcxx</code></term> 359 <listitem> 360 <para> 361 By default, a complete <emphasis>hosted</emphasis> C++ library is 362 built. The C++ Standard also describes a 363 <emphasis>freestanding</emphasis> environment, in which only a 364 minimal set of headers are provided. This option builds such an 365 environment. 366 </para> 367 </listitem></varlistentry> 368 369<varlistentry><term><code>--disable-libstdcxx-verbose</code></term> 370 <listitem> 371 <para> 372 By default, the library is configured to write descriptive messages 373 to standard error for certain events such as calling a pure virtual 374 function or the invocation of the standard terminate handler. Those 375 messages cause the library to depend on the demangler and standard I/O 376 facilities, which might be undesirable in a low-memory environment or 377 when standard error is not available. This option disables those 378 messages. This option does not change the library ABI. 379 </para> 380 </listitem></varlistentry> 381 382<varlistentry><term><code>--disable-libstdcxx-dual-abi</code></term> 383 <listitem> 384 <para> 385 Disable support for the new, C++11-conforming implementations of 386 <code>std::string</code>, <code>std::list</code> etc. so that the 387 library only provides definitions of types using the old ABI 388 (see <xref linkend="manual.intro.using.abi"/>). 389 This option changes the library ABI. 390 </para> 391 </listitem></varlistentry> 392 393<varlistentry><term><code>--with-default-libstdcxx-abi=</code><replaceable>OPTION</replaceable></term> 394 <listitem> 395 <para> 396 Set the default value for the <symbol>_GLIBCXX_USE_CXX11_ABI</symbol> 397 macro (see <xref linkend="manual.intro.using.macros"/>). 398 The default is <option>OPTION=new</option> which sets the macro to 399 <literal>1</literal>, 400 use <option>OPTION=gcc4-compatible</option> to set it to 401 <literal>0</literal>. 402 This option does not change the library ABI. 403 </para> 404 </listitem></varlistentry> 405 406 <varlistentry><term><code>--with-libstdcxx-lock-policy=OPTION</code></term> 407 <listitem><para>Sets the lock policy that controls how 408 <classname>shared_ptr</classname> reference counting is 409 synchronized. 410 The choice OPTION=atomic enables use of atomics for updates to 411 <classname>shared_ptr</classname> reference counts. 412 The choice OPTION=mutex enables use of a mutex to synchronize updates 413 to <classname>shared_ptr</classname> reference counts. 414 If the compiler's thread model is "single" then this option has no 415 effect, as no synchronization is used for the reference counts. 416 The default is OPTION=auto, which checks for the availability of 417 compiler built-ins for 2-byte and 4-byte atomic compare-and-swap, 418 and uses OPTION=atomic if they're available, OPTION=mutex otherwise. 419 This option can change the library ABI. 420 If the library is configured to use atomics and user programs are 421 compiled using a target that doesn't natively support the atomic 422 operations (e.g. the library is configured for armv7 and then code 423 is compiled with <option>-march=armv5t</option>) then the program 424 might rely on support in libgcc to provide the atomics. 425 </para> 426 </listitem></varlistentry> 427 428 <varlistentry><term><code>--enable-vtable-verify</code>[default]</term> 429 <listitem> 430 <para>Use <code>-fvtable-verify=std</code> to compile the C++ 431 runtime with instrumentation for vtable verification. All virtual 432 functions in the standard library will be verified at runtime. 433 Types impacted include <classname>locale</classname> and 434 <classname>iostream</classname>, and others. Disabling means that 435 the C++ runtime is compiled without support for vtable 436 verification. By default, this option is off. 437 </para> 438 </listitem></varlistentry> 439 440 <varlistentry><term><code>--enable-libstdcxx-filesystem-ts</code>[default]</term> 441 <listitem> 442 <para>Build <filename class="libraryfile">libstdc++fs.a</filename> as well 443 as the usual libstdc++ and libsupc++ libraries. This is enabled by 444 default on select POSIX targets where it is known to work and disabled 445 otherwise. 446 </para> 447 </listitem></varlistentry> 448 449</variablelist> 450 451</section> 452