title: Symbol names convention in libstdc++
body: <p>During building a library I got the following &quot;undefined reference&quot; error:</p>
  <pre><code>libtbb.so.2: undefined reference to `__cxa_init_primary_exception@CXXABI_1.3.11'
  </code></pre>
  <p>When I checked the symbols in my libstdc++ library I saw the following</p>
  <pre><code>nm -CD libstdc++.so.6.0.24 | grep &quot;__cxa_init_primary_exception&quot;
  000000000008fdd8 T __cxa_init_primary_exception@@CXXABI_1.3.11
  </code></pre>
  <p>So the only difference between the symbol name in libstdc++.so and what libtbb.so seems to require is an additional &quot;@&quot; in the symbol name. Even more interesting if I type</p>
  <pre><code>nm -C libtbb.so.2 | grep &quot;__cxa_init_primary_exception&quot;
                   U __cxa_init_primary_exception@@CXXABI_1.3.11
  </code></pre>
  <p>I see that libtbb requires a symbol which actually includes a double @. What's the ratio behind this naming convention and why does the linker search for a symbol name with one @?</p>