[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [MiNT] gcc-4.2.2-mint-20080127
Keith Scroggins wrote:
sound/libsound.a(ym2612.o): In function
`MidiDriver_Emulated::MidiDriver_Emulated(Audio::Mixer*)':
/home/Keith/scummvm-build/../scummvm/sound/softsynth/emumidi.h:60:
multiple definition of `non-virtual thunk to MidiDriver_Emulated::open()'
sound/libsound.a(adlib.o):
/home/Keith/scummvm-build/../scummvm/sound/softsynth/emumidi.h:60: first
defined here
I tried to cross-build ScummVM from the sources. Of course, it didn't
link, because I don't have all the required libraries. However, it is
enough to reproduce the virtual thunk problem !
I finally understood that `non-virtual thunk to
MidiDriver_Emulated::open()' is simply the demangled name of a symbol
(i.e. a function with a non-standard name)
An example of demangling using the c++filt tool:
$ m68k-atari-mint-c++filt __ZTv0_n12_N5Scumm9ScummFileD1Ev
virtual thunk to Scumm::ScummFile::~ScummFile()
That problematic symbols are defined with .globl in several files, thus
the linker complains with multiple definitions.
ScummVM uses a complicated class tree with multiple inheritance and
virtual inheritance (!), which is quite uncommon. The problem may be
caused by a GCC bug, probably not related with the MiNT patch.
So... I think the first thing to do is to go to bed.
--
Vincent Rivière