Mac OSX: Compiling SDL_mixer with Universal SDL Library

Hello !

I just compiled the Universal SDL lib on my system with
the fatbuild script. Then i compiled the other Helper Libs.
with this Universal SDL lib. _net, _rtf, _ttf, _image. Only SDL_mixer
gave me the following error :

torsten-giebls-ibook-g4:~/code/SDL/SDL_mixer wizard$ make
Making all in mikmod
make[1]: Nothing to be done for all'. Making all in timidity make[1]: Nothing to be done forall’.
Making all in native_midi
make[1]: Nothing to be done for all'. /bin/sh ./libtool --mode=link gcc -g -O2 -I/usr/local/include/SDL -D_GNU_SOURCE=1 -D_THREAD_SAFE -DCMD_MUSIC -DWAV_MUSIC -DMOD_MUSIC -I./mikmod -DMID_MUSIC -DUSE_TIMIDITY_MIDI -I./timidity -DUSE_NATIVE_MIDI -I./native_midi -DOGG_MUSIC -DMP3_MUSIC -I/usr/local/include -I/usr/local/include/smpeg -I/usr/local/include/SDL -D_GNU_SOURCE=1 -D_THREAD_SAFE -o libSDL_mixer.la -rpath /usr/local/lib -no-undefined -release 1.2 -version-info 2:5:2 -export-symbols-regex Mix_.* load_aiff.lo load_voc.lo load_ogg.lo mixer.lo music.lo music_cmd.lo music_ogg.lo wavestream.lo effect_position.lo effect_stereoreverse.lo effects_internal.lo mikmod/libmikmod.la timidity/libtimidity.la native_midi/libnativemidi.la -framework QuickTime -lvorbisfile -lvorbis -logg -L/usr/local/lib -lsmpeg -L/usr/local/lib -lSDLmain -lSDL -Wl,-framework,Cocoa -Wl,-framework,OpenGL -L/usr/local/lib -lSDLmain -lSDL -Wl,-framework,Cocoa -Wl,-framework,OpenGL -lstdc++ rm -fr .libs/libSDL_mixer.exp .libs/libSDL_mixer.lax generating symbol list forlibSDL_mixer.la’
/usr/bin/nm -p .libs/load_aiff.o .libs/load_voc.o .libs/load_ogg.o
.libs/mixer.o .libs/music.o .libs/music_cmd.o .libs/music_ogg.o
.libs/wavestream.o .libs/effect_position.o .libs/effect_stereoreverse.o
.libs/effects_internal.o mikmod/.libs/libmikmod.a
timidity/.libs/libtimidity.a native_midi/.libs/libnativemidi.a
/usr/local/lib/libsmpeg.a | sed -n -e ‘s/^.[
]([BCDEGRST][BCDEGRST]
)[ ][
](_)([_A-Za-z][_A-Za-z0-9])$/\1 \2\3 \3/p’ | /usr/bin/sed ‘s/.* //’
| sort | uniq > .libs/libSDL_mixer.exp
/usr/bin/nm: no name list
/usr/bin/nm: no name list
grep -E -e “Mix_." “.libs/libSDL_mixer.exp” > ".libs/libSDL_mixer.expT"
mv -f “.libs/libSDL_mixer.expT” ".libs/libSDL_mixer.exp"
rm -fr .libs/libSDL_mixer.lax
mkdir .libs/libSDL_mixer.lax
rm -fr .libs/libSDL_mixer.lax/libmikmod.a
mkdir .libs/libSDL_mixer.lax/libmikmod.a
Extracting /Users/wizard/code/SDL/SDL_mixer/mikmod/.libs/libmikmod.a
rm -fr .libs/libSDL_mixer.lax/libtimidity.a
mkdir .libs/libSDL_mixer.lax/libtimidity.a
Extracting /Users/wizard/code/SDL/SDL_mixer/timidity/.libs/libtimidity.a
rm -fr .libs/libSDL_mixer.lax/libnativemidi.a
mkdir .libs/libSDL_mixer.lax/libnativemidi.a
Extracting /Users/wizard/code/SDL/SDL_mixer/native_midi/.libs/libnativemidi.a
rm -fr .libs/libSDL_mixer.lax/libsmpeg.a
mkdir .libs/libSDL_mixer.lax/libsmpeg.a
Extracting /usr/local/lib/libsmpeg.a
sed -e "s,#.
,” -e “s,^[ ]," -e "s,^(…),_&,” <
.libs/libSDL_mixer.exp > .libs/libSDL_mixer-symbols.expsym
gcc -dynamiclib -o .libs/libSDL_mixer-1.2.0.2.5.dylib .libs/load_aiff.o
.libs/load_voc.o .libs/load_ogg.o .libs/mixer.o .libs/music.o
.libs/music_cmd.o .libs/music_ogg.o .libs/wavestream.o
.libs/effect_position.o .libs/effect_stereoreverse.o
.libs/effects_internal.o .libs/libSDL_mixer.lax/libmikmod.a/drv_nos.o
.libs/libSDL_mixer.lax/libmikmod.a/load_it.o
.libs/libSDL_mixer.lax/libmikmod.a/load_mod.o
.libs/libSDL_mixer.lax/libmikmod.a/load_s3m.o
.libs/libSDL_mixer.lax/libmikmod.a/load_xm.o
.libs/libSDL_mixer.lax/libmikmod.a/mdreg.o
.libs/libSDL_mixer.lax/libmikmod.a/mdriver.o
.libs/libSDL_mixer.lax/libmikmod.a/mloader.o
.libs/libSDL_mixer.lax/libmikmod.a/mlreg.o
.libs/libSDL_mixer.lax/libmikmod.a/mlutil.o
.libs/libSDL_mixer.lax/libmikmod.a/mmalloc.o
.libs/libSDL_mixer.lax/libmikmod.a/mmerror.o
.libs/libSDL_mixer.lax/libmikmod.a/mmio.o
.libs/libSDL_mixer.lax/libmikmod.a/mplayer.o
.libs/libSDL_mixer.lax/libmikmod.a/munitrk.o
.libs/libSDL_mixer.lax/libmikmod.a/mwav.o
.libs/libSDL_mixer.lax/libmikmod.a/npertab.o
.libs/libSDL_mixer.lax/libmikmod.a/sloader.o
.libs/libSDL_mixer.lax/libmikmod.a/virtch.o
.libs/libSDL_mixer.lax/libmikmod.a/virtch2.o
.libs/libSDL_mixer.lax/libmikmod.a/virtch_common.o
.libs/libSDL_mixer.lax/libtimidity.a/common.o
.libs/libSDL_mixer.lax/libtimidity.a/controls.o
.libs/libSDL_mixer.lax/libtimidity.a/filter.o
.libs/libSDL_mixer.lax/libtimidity.a/instrum.o
.libs/libSDL_mixer.lax/libtimidity.a/mix.o
.libs/libSDL_mixer.lax/libtimidity.a/output.o
.libs/libSDL_mixer.lax/libtimidity.a/playmidi.o
.libs/libSDL_mixer.lax/libtimidity.a/readmidi.o
.libs/libSDL_mixer.lax/libtimidity.a/resample.o
.libs/libSDL_mixer.lax/libtimidity.a/sdl_a.o
.libs/libSDL_mixer.lax/libtimidity.a/sdl_c.o
.libs/libSDL_mixer.lax/libtimidity.a/tables.o
.libs/libSDL_mixer.lax/libtimidity.a/timidity.o
.libs/libSDL_mixer.lax/libnativemidi.a/native_midi_common.o
.libs/libSDL_mixer.lax/libnativemidi.a/native_midi_mac.o
.libs/libSDL_mixer.lax/libnativemidi.a/native_midi_win32.o
.libs/libSDL_mixer.lax/libsmpeg.a/bitwindow.o
.libs/libSDL_mixer.lax/libsmpeg.a/decoders.o
.libs/libSDL_mixer.lax/libsmpeg.a/filter.o
.libs/libSDL_mixer.lax/libsmpeg.a/filter_2.o
.libs/libSDL_mixer.lax/libsmpeg.a/floatdct.o
.libs/libSDL_mixer.lax/libsmpeg.a/gdith.o
.libs/libSDL_mixer.lax/libsmpeg.a/huffmantable.o
.libs/libSDL_mixer.lax/libsmpeg.a/jrevdct.o
.libs/libSDL_mixer.lax/libsmpeg.a/mmxflags_asm.o
.libs/libSDL_mixer.lax/libsmpeg.a/mmxidct_asm.o
.libs/libSDL_mixer.lax/libsmpeg.a/motionvector.o
.libs/libSDL_mixer.lax/libsmpeg.a/MPEG.o
.libs/libSDL_mixer.lax/libsmpeg.a/MPEGaudio.o
.libs/libSDL_mixer.lax/libsmpeg.a/MPEGfilter.o
.libs/libSDL_mixer.lax/libsmpeg.a/mpeglayer1.o
.libs/libSDL_mixer.lax/libsmpeg.a/mpeglayer2.o
.libs/libSDL_mixer.lax/libsmpeg.a/mpeglayer3.o
.libs/libSDL_mixer.lax/libsmpeg.a/MPEGlist.o
.libs/libSDL_mixer.lax/libsmpeg.a/MPEGring.o
.libs/libSDL_mixer.lax/libsmpeg.a/MPEGstream.o
.libs/libSDL_mixer.lax/libsmpeg.a/MPEGsystem.o
.libs/libSDL_mixer.lax/libsmpeg.a/mpegtable.o
.libs/libSDL_mixer.lax/libsmpeg.a/mpegtoraw.o
.libs/libSDL_mixer.lax/libsmpeg.a/MPEGvideo.o
.libs/libSDL_mixer.lax/libsmpeg.a/parseblock.o
.libs/libSDL_mixer.lax/libsmpeg.a/readfile.o
.libs/libSDL_mixer.lax/libsmpeg.a/smpeg.o
.libs/libSDL_mixer.lax/libsmpeg.a/util.o
.libs/libSDL_mixer.lax/libsmpeg.a/vhar128.o
.libs/libSDL_mixer.lax/libsmpeg.a/video.o
-L/Developer/SDKs/MacOSX10.2.8.sdk/usr/lib/gcc/darwin/3.3 -L/usr/local/lib
-framework QuickTime /usr/local/lib/libvorbisfile.dylib
/usr/local/lib/libvorbis.dylib /usr/local/lib/libogg.dylib -lSDLmain
/usr/local/lib/libSDL.dylib -lstdc++ -Wl,-framework -Wl,Cocoa
-Wl,-framework -Wl,OpenGL -Wl,-framework -Wl,Cocoa -Wl,-framework
-Wl,OpenGL -install_name /usr/local/lib/libSDL_mixer-1.2.0.dylib
-Wl,-compatibility_version -Wl,3 -Wl,-current_version -Wl,3.5
ld: Undefined symbols:
___gcc_qmul
/usr/bin/libtool: internal link edit command failed
make[1]: *** [libSDL_mixer.la] Error 1
make: *** [all-recursive] Error 1
torsten-giebls-ibook-g4:~/code/SDL/SDL_mixer wizard$

I know that this makes not much sense as the other libs
are not fatbuild ready now. But other people may also try this.

CU

ld: Undefined symbols:
___gcc_qmul

Is the problem that SDL was built with gcc 3.3 and SDL_mixer was built with gcc 4.0?

See ya!
-Sam Lantinga, Senior Software Engineer, Blizzard Entertainment

I just compiled the Universal SDL lib on my system with
the fatbuild script. Then i compiled the other Helper Libs.
with this Universal SDL lib. _net, _rtf, _ttf, _image. Only SDL_mixer
gave me the following error :

ld: Undefined symbols:
___gcc_qmul
/usr/bin/libtool: internal link edit command failed

I created a gcc wrapper script (attached) which generates fat binaries
for all the other SDL_* libraries hosted at libsdl.org, unfortunately,
this trick doesn’t work with SDL_mixer, because it has subdirectories
and libtool directly extracts the objects out of the fat archives.

You can build SDL_mixer with compatible flags like this:
./configure
CC=“gcc-3.3 -arch ppc”
CPPFLAGS="-DMAC_OS_X_VERSION_MIN_REQUIRED=1020
-nostdinc
-F/Developer/SDKs/MacOSX10.2.8.sdk/System/Library/Frameworks
-I/Developer/SDKs/MacOSX10.2.8.sdk/usr/include/gcc/darwin/3.3
-isystem /Developer/SDKs/MacOSX10.2.8.sdk/usr/include"
LDFLAGS="-arch ppc
-L/Developer/SDKs/MacOSX10.2.8.sdk/usr/lib/gcc/darwin/3.3
-F/Developer/SDKs/MacOSX10.2.8.sdk/System/Library/Frameworks
-Wl,-syslibroot,/Developer/SDKs/MacOSX10.2.8.sdk"

See ya!
-Sam Lantinga, Senior Software Engineer, Blizzard Entertainment
-------------- next part --------------
#!/bin/sh#

Build Universal binaries on Mac OS X, thanks Ryan!

Usage: ./configure CC=“sh gcc-fat.sh” && make && rm -rf ppc x86

PowerPC compiler flags (10.2 runtime compatibility)

GCC_COMPILE_PPC=“gcc-3.3 -arch ppc
-DMAC_OS_X_VERSION_MIN_REQUIRED=1020
-nostdinc
-F/Developer/SDKs/MacOSX10.2.8.sdk/System/Library/Frameworks
-I/Developer/SDKs/MacOSX10.2.8.sdk/usr/include/gcc/darwin/3.3
-isystem /Developer/SDKs/MacOSX10.2.8.sdk/usr/include”

GCC_LINK_PPC="
-L/Developer/SDKs/MacOSX10.2.8.sdk/usr/lib/gcc/darwin/3.3
-F/Developer/SDKs/MacOSX10.2.8.sdk/System/Library/Frameworks
-Wl,-syslibroot,/Developer/SDKs/MacOSX10.2.8.sdk"

Intel compiler flags (10.4 runtime compatibility)

GCC_COMPILE_X86=“gcc-4.0 -arch i386 -mmacosx-version-min=10.4
-DMAC_OS_X_VERSION_MIN_REQUIRED=1040
-nostdinc
-F/Developer/SDKs/MacOSX10.4u.sdk/System/Library/Frameworks
-I/Developer/SDKs/MacOSX10.4u.sdk/usr/lib/gcc/i686-apple-darwin8/4.0.1/include
-isystem /Developer/SDKs/MacOSX10.4u.sdk/usr/include”

GCC_LINK_X86="
-L/Developer/SDKs/MacOSX10.4u.sdk/usr/lib/gcc/i686-apple-darwin8/4.0.0
-Wl,-syslibroot,/Developer/SDKs/MacOSX10.4u.sdk"

Output both PowerPC and Intel object files

args="$"
compile=yes
link=yes
while test x$1 != x; do
case $1 in
–version) exec gcc $1;;
-v) exec gcc $1;;
-V) exec gcc $1;;
-print-prog-name=
) exec gcc $1;;
-print-search-dirs) exec gcc $1;;
-E) GCC_COMPILE_PPC="$GCC_COMPILE_PPC -E"
GCC_COMPILE_X86="$GCC_COMPILE_X86 -E"
compile=no; link=no;;
-c) link=no;;
-o) output=$2;;
*.c) source=$1;;
esac
shift
done
if test x$link = xyes; then
GCC_COMPILE_PPC="$GCC_COMPILE_PPC $GCC_LINK_PPC"
GCC_COMPILE_X86="$GCC_COMPILE_X86 $GCC_LINK_X86"
fi
if test x"$output" = x; then
if test x$link = xyes; then
output=a.out
elif test x$compile = xyes; then
output=basename $source .c.o
fi
fi

if test x"$output" != x; then
dir=ppc/dirname $output
if test -d $dir; then
:
else
mkdir -p $dir
fi
fi
set – $args
while test x$1 != x; do
if test -f “ppc/$1”; then
ppc_args="$ppc_args ppc/$1"
else
ppc_args="$ppc_args $1"
fi
shift
done
$GCC_COMPILE_PPC $ppc_args || exit $?
if test x"$output" != x; then
cp $output ppc/$output
fi

if test x"$output" != x; then
dir=x86/dirname $output
if test -d $dir; then
:
else
mkdir -p $dir
fi
fi
set – $args
while test x$1 != x; do
if test -f “x86/$1”; then
x86_args="$x86_args x86/$1"
else
x86_args="$x86_args $1"
fi
shift
done
$GCC_COMPILE_X86 $x86_args || exit $?
if test x"$output" != x; then
cp $output x86/$output
fi

if test x"$output" != x; then
lipo -create -o $output ppc/$output x86/$output
fi

I just compiled the Universal SDL lib on my system with
the fatbuild script. Then i compiled the other Helper Libs.
with this Universal SDL lib. _net, _rtf, _ttf, _image. Only SDL_mixer
gave me the following error :

Okay, this should be fixed in subversion, just update and then do:
./configure CC=“sh gcc-fat.sh

-Sam Lantinga, Senior Software Engineer, Blizzard Entertainment