std::ostringstream x;
works fine with both static and dynamic linkage of many applications and libraries,
including SDL 1.3 linked statically, but fails when SDL is linked dynamically to
a manually loaded dylib.
My opinion is that you are linking different version of runtime (libSystem, libz…) in SDL and your application (in osx this is a big problem since every release they change a lot).
This will cause problems for sure (a typical problem is to free() a region of memory that has been allocated by a shared library or to pass a not POD object like an std::string through the “gate” library <-> application).
Try to inspect with “otool -L” the dependencies of every actor (app, dylib and SDL).
~/felix>otool -L demos/sdl/sdl-1.01.03-0.dylib
demos/sdl/sdl-1.01.03-0.dylib:
demos/sdl/sdl-1.01.03-0.dylib (compatibility version 0.0.0, current version 0.0.0)
build/release/lib/rtl/libdemux_dynamic.dylib (compatibility version 0.0.0, current version 0.0.0)
build/release/lib/rtl/libflx_pthread_dynamic.dylib (compatibility version 0.0.0, current version 0.0.0)
build/release/lib/rtl/libflx_gc_dynamic.dylib (compatibility version 0.0.0, current version 0.0.0)
build/release/lib/rtl/libjudy_dynamic.dylib (compatibility version 0.0.0, current version 0.0.0)
build/release/lib/rtl/libfaio_dynamic.dylib (compatibility version 0.0.0, current version 0.0.0)
/System/Library/Frameworks/OpenGL.framework/Versions/A/OpenGL (compatibility version 1.0.0, current version 1.0.0)
/usr/local/lib/libSDL-1.3.0.dylib (compatibility version 1.0.0, current version 1.0.0)
build/release/lib/rtl/libflx_dynamic.dylib (compatibility version 0.0.0, current version 0.0.0)
build/release/lib/rtl/libflx_exceptions_dynamic.dylib (compatibility version 0.0.0, current version 0.0.0)
/usr/local/lib/libstdc++.6.dylib (compatibility version 7.0.0, current version 7.15.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 125.0.1)
~/felix>otool -L /usr/local/lib/libSDL-1.3.0.dylib
/usr/local/lib/libSDL-1.3.0.dylib:
/usr/local/lib/libSDL-1.3.0.dylib (compatibility version 1.0.0, current version 1.0.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 125.0.1)
/usr/lib/libiconv.2.dylib (compatibility version 7.0.0, current version 7.0.0)
/usr/lib/libobjc.A.dylib (compatibility version 1.0.0, current version 227.0.0)
/System/Library/Frameworks/OpenGL.framework/Versions/A/OpenGL (compatibility version 1.0.0, current version 1.0.0)
/System/Library/Frameworks/ForceFeedback.framework/Versions/A/ForceFeedback (compatibility version 1.0.0, current version 1.0.2)
/System/Library/Frameworks/Cocoa.framework/Versions/A/Cocoa (compatibility version 1.0.0, current version 15.0.0)
/System/Library/Frameworks/Carbon.framework/Versions/A/Carbon (compatibility version 2.0.0, current version 152.0.0)
/System/Library/Frameworks/IOKit.framework/Versions/A/IOKit (compatibility version 1.0.0, current version 275.0.0)
/System/Library/Frameworks/CoreAudio.framework/Versions/A/CoreAudio (compatibility version 1.0.0, current version 1.0.0)
/System/Library/Frameworks/AudioToolbox.framework/Versions/A/AudioToolbox (compatibility version 1.0.0, current version 1.0.0)
/System/Library/Frameworks/AudioUnit.framework/Versions/A/AudioUnit (compatibility version 1.0.0, current version 1.0.0)
/System/Library/Frameworks/CoreServices.framework/Versions/A/CoreServices (compatibility version 1.0.0, current version 44.0.0)
/System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation (compatibility version 150.0.0, current version 550.19.0)
/System/Library/Frameworks/ApplicationServices.framework/Versions/A/ApplicationServices (compatibility version 1.0.0, current version 38.0.0)
/System/Library/Frameworks/Foundation.framework/Versions/C/Foundation (compatibility version 300.0.0, current version 751.21.0)
/System/Library/Frameworks/AppKit.framework/Versions/C/AppKit (compatibility version 45.0.0, current version 1038.29.0)
build/release/bin/flx_arun:
build/release/lib/rtl/libflx_dynamic.dylib (compatibility version 0.0.0, current version 0.0.0)
build/release/lib/rtl/libflx_gc_dynamic.dylib (compatibility version 0.0.0, current version 0.0.0)
build/release/lib/rtl/libflx_pthread_dynamic.dylib (compatibility version 0.0.0, current version 0.0.0)
build/release/lib/rtl/libflx_exceptions_dynamic.dylib (compatibility version 0.0.0, current version 0.0.0)
build/release/lib/rtl/libjudy_dynamic.dylib (compatibility version 0.0.0, current version 0.0.0)
build/release/lib/rtl/libflx_async_dynamic.dylib (compatibility version 0.0.0, current version 0.0.0)
build/release/lib/rtl/libdemux_dynamic.dylib (compatibility version 0.0.0, current version 0.0.0)
build/release/lib/rtl/libfaio_dynamic.dylib (compatibility version 0.0.0, current version 0.0.0)
/usr/lib/libstdc++.6.dylib (compatibility version 7.0.0, current version 7.9.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 125.0.1)
flx_arun is the mainline. Note it does NOT use any SDL_main.* stuff. In 1.3 there doesn’t seem to
be anything specific to do.
The only difference here between SDL an some other libs we use is that SDL
contains Objective-C code. That at least causes some problems with NSPool things
(leaks due to not registering stiff in an autorelease pool ?)
In 1.2 we HAD to have some startup code in the mainline.On 10/02/2011, at 9:42 PM, Gabriele Greco wrote:
–
john skaller
@john_skaller