[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