Hello,

g++ (GCC) 5.3.1 20160406 (Red Hat 5.3.1-6)
GNU gold (version 2.25-17.fc23) 1.11
I successfully link a executable in debug mode (-std=c++11 -g) but not in
release mode (-std=c++11 -flto -O3). All sources are compiled with the same
option. Shared libraries are used.
The compiler driver is used to launch the final link line:
/bin/c++    -std=c++11 -Wno-multichar -O3 -DNDEBUG -flto   <listofOfiles>
 -o <executable> -rdynamic <listofsolibs> Wl,-rpath,<longlistofdirs>

These are the errors I see (only in release, not in debug):
 ... [clone .constprop.79]: error: undefined reference to
     'typeinfo for <ns1>::<ns2>::market [clone .lto_priv.1353]'

Both the debug and release version of the object referencing this show the
same with gcc-nm:

                 U typeinfo for <ns1>::<ns2>::market
 Note this bit   " [clone .lto_priv.1353]" is not in the symbol at all.

This is what gcc-nm says for the object where the symbol is defined
(market.cpp.o, which is part of libmarkets.so):

1. In DEBUG
gcc-nm -C market.cpp.o |  grep 'typeinfo for <ns1>::<ns2>::market'
     0000000000000000 V typeinfo for <ns1>::<ns2>::market

2. In RELEASE
gcc-nm -C market.cpp.o |  grep 'typeinfo for <ns1>::<ns2>::market'
    00000000 W typeinfo for <ns1>::<ns2>::market
This is the one that fails.
Given the versions of gcc and ld, the default behaviour for lto should be
straightforward?
Any ideas what's going on?

Thanks
MM

Reply via email to