On Sun, Apr 10, 2011 at 7:17 AM, Benjamin Redelings I <benjamin.redeli...@nescent.org> wrote: > On 04/10/2011 05:43 AM, Richard Guenther wrote: >> >> 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. > > Hi Richard, > > For what its worth, I got the same error messages using a 04/09/11 > snapshot of binutils/gold version 2.21.51 from Debian. So, if its a bug its > still there. I'll try -flto-partition=none on Monday.
You can try hjl/lto-mix branch from http://git.kernel.org/?p=devel/binutils/hjl/x86.git;a=summary -- H.J.