On Sun, Apr 10, 2011 at 1:04 AM, Benjamin Redelings I <benjamin.redeli...@nescent.org> wrote: > Hi, > > I just tried compiling with LTO for the first time. I can't figure out > what to try based on the error message below. Is there a HTML page I should > be looking at? > > It seems that this did not work: > > g++-4.6 -isystem ../../../master/boost/include -ffast-math -DNDEBUG > -DNDEBUG_DP -funroll-loops -fweb -flto -fuse-linker-plugin -march=native > -pipe -O3 -isystem /usr/lib/openmpi/include -isystem > /usr/lib/openmpi/include/openmpi -pthread -pedantic -pthread > -I/usr/include/cairo -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include > -I/usr/include/pixman-1 -I/usr/include/freetype2 -I/usr/include/libpng12 > -Wall -Wextra -Wno-sign-compare -Woverloaded-virtual -Wstrict-aliasing -o > alignment-gild alignment-gild.o alignment.o alphabet.o sequence.o util.o > rng.o tree.o sequencetree.o optimize.o findroot.o setup.o imodel.o > probability.o sequence-format.o model.o distance-methods.o > alignment-random.o alignment-util.o randomtree.o tree-util.o inverse.o io.o > ../boost/lib/filesystem/libboost_filesystem.a > ../boost/lib/program_options/libboost_program_options.a -lgsl -lgslcblas -lm > /usr/bin/ld.gold: error: /tmp/cc4IJUrh.ltrans12.ltrans.o: multiple > definition of '_ZTV18RootedSequenceTree.local.4048' > /usr/bin/ld.gold: /tmp/cc4IJUrh.ltrans7.ltrans.o: previous definition here > /usr/bin/ld.gold: error: /tmp/cc4IJUrh.ltrans12.ltrans.o: multiple > definition of '_ZTT18RootedSequenceTree.local.4049' > /usr/bin/ld.gold: /tmp/cc4IJUrh.ltrans7.ltrans.o: previous definition here > collect2: ld returned 1 exit status > > So, it looks like the virtual table for class RootedSequenceTree is defined > in multiple places. But the file name cc4IJUrh.ltrans12.ltrans.o doesn't > clearly correspond to any input file name. Is there any way for me to find > out which *.o files have definitions for this symbol, and why they are > problematic only with LTO?
It looks like a bug either in GCC or in gold. Can you try updating binutils to the head of the 2.21 branch (or to mainline)? You can probably mitigate the problem by using -flto-partition=none (use a single partition for optimizing at link-time). The .ltransXX files are the whole program partitioned into smaller chunks, ordered in a way that maximizes optimization opportunities and allow parallel optimization at link-time (and also reduce the memory footprint by reducing the size of the TUs GCC has to deal with). Richard. > > -BenRI > > P.S. Apparently this did work: > > g++-4.6 -isystem ../../../master/boost/include -ffast-math -DNDEBUG > -DNDEBUG_DP -funroll-loops -fweb -flto -fuse-linker-plugin -march=native > -pipe -O3 -isystem /usr/lib/openmpi/include -isystem > /usr/lib/openmpi/include/openmpi -pthread -pedantic -pthread > -I/usr/include/cairo -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include > -I/usr/include/pixman-1 -I/usr/include/freetype2 -I/usr/include/libpng12 > -Wall -Wextra -Wno-sign-compare -Woverloaded-virtual -Wstrict-aliasing -o > bali-phy sequence.o tree.o alignment.o substitution.o moves.o rng.o > exponential.o eigenvalue.o parameters.o likelihood.o mcmc.o choose.o > sequencetree.o sample-branch-lengths.o util.o randomtree.o alphabet.o > smodel.o bali-phy.o hmm.o dp-engine.o dp-array.o dp-matrix.o 3way.o 2way.o > sample-alignment.o sample-tri.o sample-node.o imodel.o 5way.o > sample-topology-NNI.o setup.o rates.o matcache.o sample-two-nodes.o > sequence-format.o util-random.o alignment-random.o setup-smodel.o > sample-topology-SPR.o alignment-sums.o alignment-util.o probability.o > model.o alignment-constraint.o substitution-cache.o substitution-star.o > monitor.o substitution-index.o tree-util.o myexception.o pow2.o partition.o > proposals.o n_indels.o distribution.o parsimony.o version.o slice-sampling.o > timer_stack.o setup-mcmc.o io.o logger.o AIS.o > ../boost/lib/mpi/libboost_mpi.a > ../boost/lib/serialization/libboost_serialization.a -pthread > -L/usr/lib/openmpi/lib -lmpi_cxx -lmpi -lopen-rte -lopen-pal -ldl > -Wl,--export-dynamic -lnsl -lutil -lm -ldl > ../boost/lib/filesystem/libboost_filesystem.a > ../boost/lib/program_options/libboost_program_options.a -lgsl -lgslcblas -lm > > If I don't use LTO (that is, if I remove "-flto -fuse-linker-plugin") then > everything works. >