#2210 closed defect (worksforme)
MAC: ScummVM does not compile on Mac with MT-32 emu disabled
Reported by: | SF/fancia | Owned by: | fingolfin |
---|---|---|---|
Priority: | normal | Component: | Port: Mac OS X |
Version: | Keywords: | ||
Cc: | Game: |
Description
After compiling ScummVM with the MT-32 emulator disabled, ld fails to link with the following errors under GCC 4.0:
/usr/bin/ld: Undefined symbols: MidiDriver_MPU401::allocateChannel() MidiDriver_MPU401::setTimerCallback(void*, void (*)(void*)) MidiDriver_MPU401::close() MidiDriver_MPU401::property(int, unsigned int) MidiDriver_MPU401::MidiDriver_MPU401() typeinfo for MidiDriver_MPU401 vtable for MidiDriver_MPU401 collect2: ld returned 1 exit status make: *** [scummvm] Error 1
GCC 3.3 gives these errors instead:
ld: Undefined symbols: __ZN17MidiDriver_MPU40115allocateChannelEv __ZN17MidiDriver_MPU40116setTimerCallbackEPvPFvS0_E __ZN17MidiDriver_MPU4015closeEv __ZN17MidiDriver_MPU4018propertyEij __ZN17MidiDriver_MPU401C2Ev __ZTV17MidiDriver_MPU401 make: *** [scummvm] Error 1
I've tested with both GCC 3.3 and 4.0 under Mac OS X 10.4.2 with an up-to-date CVS.
Ticket imported from: #1298180. Ticket imported from: bugs/2210.
Change History (12)
comment:1 by , 19 years ago
comment:2 by , 19 years ago
For whatever it's worth, I got some similar error when trying to compile a very minimal ScummVM under MinGW. The GCC version is listed as "3.4.2 (mingw-special)". Re-enabling the MT-32 emulator allowed me to compile it again.
(That was with a month-old CVS snapshot, though: I'm currently trying to find out when a SAGA graphics glitch first appeared, so I disabled just about everything I could, except the SAGA engine.)
comment:3 by , 19 years ago
I could take a look at this, but only with GCC 3.X on OS X 10.3.9, but I think the link order is wrong. I will tell if I got it to work.
comment:4 by , 19 years ago
Owner: | set to |
---|
comment:5 by , 19 years ago
Owner: | removed |
---|
comment:6 by , 19 years ago
It is a problem with the linking, since if you put the libsound.a after the libbackends.a there are only undefined symbols to the functions in libbackends.a (MidiDriver_NULL_Create() and so on), but I have no real idea how to fix it.
comment:7 by , 19 years ago
btw. I also tried to add "virtual ~MidiDriver_MPU401() { }" to the MidiDriver_MPU401 class and the same for the classes in the backends/midi dir, but no success, sry forget to tell it.
comment:8 by , 19 years ago
Owner: | set to |
---|---|
Summary: | ALL: ScummVM does not compile on Mac with MT-32 emu disabled → MAC: ScummVM does not compile on Mac with MT-32 emu disabled |
comment:9 by , 19 years ago
The linker on OS X behaves differently than the linker on e.g. Linux (GNU ld), so to an extent it's normal that things behave differently between the two.
Lordhoto, the link order as such is not "wrong". You are not seeing the other errors after your change simply because the linker fails before even "seeing" the linker errors reported in this post.
Adding "virtual" keywords won't help either, as this is totally unrelated to the issue at hand. It really doesn't help to try random fixes, it's much better to read up "man ld" etc. in order to properly *understand* what's going on :-).
comment:10 by , 19 years ago
FYI, I can't reproduce the problem with latest CVS, under OS X 10.4.4 with GCC 3.3 and 4.0.1.
To be precise, I did a HEAD checkout, run ./configure --disable-mt32emu && make and that worked.
comment:11 by , 19 years ago
Resolution: | → worksforme |
---|---|
Status: | new → closed |
comment:12 by , 6 years ago
Component: | → Port: Mac OS X |
---|
Weird, since same Makefiles are used accross many platforms and it compiles here ok. May you attach (a) configure output refirected to a file (b) config.h (c) config.mak