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