The final linking for my program (d2x) always fails on OS X, with this little gem:
gcc -I ./arch/linux/include -I/sw/include -I/sw/include/SDL -D_THREAD_SAFE
-F/System/Library/Frameworks/Carbon.framework
-F/System/Library/Frameworks/Cocoa.framework -pipe -g -Wall -Werror -o
d2x-sdl main/libmain.a 3d/lib3d.a 2d/lib2d.a arch/linux/libarch_linux.a
arch/sdl/libarch_sdl.a libmve/libmve.a mem/libmem.a cfile/libcfile.a
iff/libiff.a texmap/libtexmap.a misc/libmisc.a maths/libmaths.a -lm -lSDL_image
-L/sw/lib -lSDLmain -lSDL -framework OpenGL -framework AGL -framework IOKit
-framework Carbon -framework Cocoa
/usr/bin/ld: Undefined symbols:
_SDL_main
My declaration of main looks like this:
int main(int argc, char *argv[])
and SDL.h is included.
I think libmain.a looks fine:
nm main/libmain.a | grep SDL_main
000006b8 T _SDL_main
But if I link “manually” like so:
gcc -I ./arch/linux/include -I/sw/include -I/sw/include/SDL -D_THREAD_SAFE
-F/System/Library/Frameworks/Carbon.framework
-F/System/Library/Frameworks/Cocoa.framework -pipe -g -Wall -Werror -o
d2x-sdl find . -name "*.o"
-lm -lSDL_image -L/sw/lib -lSDLmain -lSDL
-framework OpenGL -framework AGL -framework IOKit -framework Carbon -framework
Cocoa
It works! Can anybody help me out here?
-brad
Bradley Bell wrote:
The final linking for my program (d2x) always fails on OS X, with this little gem:
gcc -I ./arch/linux/include -I/sw/include -I/sw/include/SDL -D_THREAD_SAFE
-F/System/Library/Frameworks/Carbon.framework
-F/System/Library/Frameworks/Cocoa.framework -pipe -g -Wall -Werror -o
d2x-sdl main/libmain.a 3d/lib3d.a 2d/lib2d.a arch/linux/libarch_linux.a
arch/sdl/libarch_sdl.a libmve/libmve.a mem/libmem.a cfile/libcfile.a
iff/libiff.a texmap/libtexmap.a misc/libmisc.a maths/libmaths.a -lm -lSDL_image
-L/sw/lib -lSDLmain -lSDL -framework OpenGL -framework AGL -framework IOKit
-framework Carbon -framework Cocoa
You are linking .a libraries, maybe you have dependency problems since
libmain.a is the first object.
Try to place libmain.a in the end of the link line or to add “-Lmain
-lmain”.
Bye,
Gabry
The final linking for my program (d2x) always fails on OS X, with this little gem:
gcc -I ./arch/linux/include -I/sw/include -I/sw/include/SDL -D_THREAD_SAFE
-F/System/Library/Frameworks/Carbon.framework
-F/System/Library/Frameworks/Cocoa.framework -pipe -g -Wall -Werror -o
d2x-sdl main/libmain.a 3d/lib3d.a 2d/lib2d.a arch/linux/libarch_linux.a
arch/sdl/libarch_sdl.a libmve/libmve.a mem/libmem.a cfile/libcfile.a
iff/libiff.a texmap/libtexmap.a misc/libmisc.a maths/libmaths.a -lm -lSDL_image
-L/sw/lib -lSDLmain -lSDL -framework OpenGL -framework AGL -framework IOKit
-framework Carbon -framework Cocoa
/usr/bin/ld: Undefined symbols:
_SDL_main
When you’re linking entire .a archives into your application on MacOS X,
you need to specify the -all_load option to the linker. (Check spelling)
See ya!
-Sam Lantinga, Software Engineer, Blizzard Entertainment
Quoting Sam Lantinga :
The final linking for my program (d2x) always fails on OS X, with this
When you’re linking entire .a archives into your application on MacOS X,
you need to specify the -all_load option to the linker. (Check spelling)
That fixes it! Thanks. I’m guessing this is basically a workaround for
archives with circular dependencies, then?
-brad