cxong / cdogs-sdl

Classic overhead run-and-gun game
https://cxong.github.io/cdogs-sdl/
GNU General Public License v2.0
891 stars 114 forks source link

Linux (Xubuntu 12.10 64 bit) build problem: conflicting types for 'ssize_t' #103

Closed evktalo closed 11 years ago

evktalo commented 11 years ago

Trying to build on Linux, I get the following errors. Environment: 64 bit Xubuntu 12.10

[ 4%] Building C object cdogs/CMakeFiles/cdogs.dir/actors.c.o In file included from /home/evktalo/devaus/cdogs-sdl/src/cdogs/grafx.h:54:0, from /home/evktalo/devaus/cdogs-sdl/src/cdogs/actors.h:52, from /home/evktalo/devaus/cdogs-sdl/src/cdogs/actors.c:49: /home/evktalo/devaus/cdogs-sdl/src/cdogs/sys_specifics.h:70:13: error: conflicting types for ‘ssize_t’ In file included from /usr/include/SDL/SDL_stdinc.h:34:0, from /usr/include/SDL/SDL_video.h:30, from /home/evktalo/devaus/cdogs-sdl/src/cdogs/grafx.h:52, from /home/evktalo/devaus/cdogs-sdl/src/cdogs/actors.h:52, from /home/evktalo/devaus/cdogs-sdl/src/cdogs/actors.c:49: /usr/include/x86_64-linux-gnu/sys/types.h:110:19: note: previous declaration of ‘ssize_t’ was here /home/evktalo/devaus/cdogs-sdl/src/cdogs/actors.c: In function ‘AddActor’: /home/evktalo/devaus/cdogs-sdl/src/cdogs/actors.c:318:2: error: format ‘%d’ expects argument of type ‘int’, but argument 3 has type ‘long unsigned int’ [-Werror=format] /home/evktalo/devaus/cdogs-sdl/src/cdogs/actors.c:318:2: error: format ‘%d’ expects argument of type ‘int’, but argument 3 has type ‘long unsigned int’ [-Werror=format] cc1: all warnings being treated as errors make[2]: * [cdogs/CMakeFiles/cdogs.dir/actors.c.o] Error 1 make[1]: * [cdogs/CMakeFiles/cdogs.dir/all] Error 2 make: *\ [all] Error 2

--Eino

cxong commented 11 years ago

C-Dogs SDL cannot be compiled as 64 bit; try adding -m32 to the compiler flags; I think you can do this by adding a add_definitions(-m32) to the src/CMakeLists.txt file.

http://stackoverflow.com/questions/1272357/how-to-compile-a-32-bit-binary-on-a-64-bit-linux-machine-with-gcc-cmake

evktalo commented 11 years ago

I managed to compile, but ran into incompatibility problems while linking.

Linking C executable /home/evktalo/devaus/cdogs-sdl/cdogs-sdl /usr/bin/ld: i386 architecture of input file CMakeFiles/cdogs-sdl.dir/campaigns.c.o' is incompatible with i386:x86-64 output /usr/bin/ld: i386 architecture of input fileCMakeFiles/cdogs-sdl.dir/cdogs.c.o' is incompatible with i386:x86-64 output /usr/bin/ld: i386 architecture of input file CMakeFiles/cdogs-sdl.dir/credits.c.o' is incompatible with i386:x86-64 output /usr/bin/ld: i386 architecture of input fileCMakeFiles/cdogs-sdl.dir/mainmenu.c.o' is incompatible with i386:x86-64 output /usr/bin/ld: i386 architecture of input file CMakeFiles/cdogs-sdl.dir/menu.c.o' is incompatible with i386:x86-64 output /usr/bin/ld: i386 architecture of input fileCMakeFiles/cdogs-sdl.dir/password.c.o' is incompatible with i386:x86-64 output /usr/bin/ld: i386 architecture of input file CMakeFiles/cdogs-sdl.dir/prep.c.o' is incompatible with i386:x86-64 output /usr/bin/ld: i386 architecture of input filecdogs/libcdogs.a(actors.c.o)' is incompatible with i386:x86-64 output /usr/bin/ld: i386 architecture of input file cdogs/libcdogs.a(ai.c.o)' is incompatible with i386:x86-64 output /usr/bin/ld: i386 architecture of input filecdogs/libcdogs.a(blit.c.o)' is incompatible with i386:x86-64 output /usr/bin/ld: i386 architecture of input file cdogs/libcdogs.a(config.c.o)' is incompatible with i386:x86-64 output /usr/bin/ld: i386 architecture of input filecdogs/libcdogs.a(config_apply.c.o)' is incompatible with i386:x86-64 output /usr/bin/ld: i386 architecture of input file cdogs/libcdogs.a(config_json.c.o)' is incompatible with i386:x86-64 output /usr/bin/ld: i386 architecture of input filecdogs/libcdogs.a(config_old.c.o)' is incompatible with i386:x86-64 output /usr/bin/ld: i386 architecture of input file cdogs/libcdogs.a(defs.c.o)' is incompatible with i386:x86-64 output /usr/bin/ld: i386 architecture of input filecdogs/libcdogs.a(draw.c.o)' is incompatible with i386:x86-64 output /usr/bin/ld: i386 architecture of input file cdogs/libcdogs.a(events.c.o)' is incompatible with i386:x86-64 output /usr/bin/ld: i386 architecture of input filecdogs/libcdogs.a(files.c.o)' is incompatible with i386:x86-64 output /usr/bin/ld: i386 architecture of input file cdogs/libcdogs.a(game.c.o)' is incompatible with i386:x86-64 output /usr/bin/ld: i386 architecture of input filecdogs/libcdogs.a(gamedata.c.o)' is incompatible with i386:x86-64 output /usr/bin/ld: i386 architecture of input file cdogs/libcdogs.a(grafx.c.o)' is incompatible with i386:x86-64 output /usr/bin/ld: i386 architecture of input filecdogs/libcdogs.a(hiscores.c.o)' is incompatible with i386:x86-64 output /usr/bin/ld: i386 architecture of input file cdogs/libcdogs.a(input.c.o)' is incompatible with i386:x86-64 output /usr/bin/ld: i386 architecture of input filecdogs/libcdogs.a(joystick.c.o)' is incompatible with i386:x86-64 output /usr/bin/ld: i386 architecture of input file cdogs/libcdogs.a(keyboard.c.o)' is incompatible with i386:x86-64 output /usr/bin/ld: i386 architecture of input filecdogs/libcdogs.a(map.c.o)' is incompatible with i386:x86-64 output /usr/bin/ld: i386 architecture of input file cdogs/libcdogs.a(mission.c.o)' is incompatible with i386:x86-64 output /usr/bin/ld: i386 architecture of input filecdogs/libcdogs.a(music.c.o)' is incompatible with i386:x86-64 output /usr/bin/ld: i386 architecture of input file cdogs/libcdogs.a(objs.c.o)' is incompatible with i386:x86-64 output /usr/bin/ld: i386 architecture of input filecdogs/libcdogs.a(pics.c.o)' is incompatible with i386:x86-64 output /usr/bin/ld: i386 architecture of input file cdogs/libcdogs.a(sounds.c.o)' is incompatible with i386:x86-64 output /usr/bin/ld: i386 architecture of input filecdogs/libcdogs.a(text.c.o)' is incompatible with i386:x86-64 output /usr/bin/ld: i386 architecture of input file cdogs/libcdogs.a(triggers.c.o)' is incompatible with i386:x86-64 output /usr/bin/ld: i386 architecture of input filecdogs/libcdogs.a(utils.c.o)' is incompatible with i386:x86-64 output /usr/bin/ld: i386 architecture of input file cdogs/libcdogs.a(weapon.c.o)' is incompatible with i386:x86-64 output /usr/bin/ld: i386 architecture of input filecdogs/libcdogs.a(automap.c.o)' is incompatible with i386:x86-64 output /usr/bin/ld: i386 architecture of input file cdogs/libcdogs.a(drawtools.c.o)' is incompatible with i386:x86-64 output /usr/bin/ld: i386 architecture of input filejson/libjson.a(json.c.o)' is incompatible with i386:x86-64 output /usr/bin/ld: CMakeFiles/cdogs-sdl.dir/campaigns.c.o: file class ELFCLASS32 incompatible with ELFCLASS64 /usr/bin/ld: final link failed: File in wrong format collect2: error: ld returned 1 exit status

--Eino

cxong commented 11 years ago

I think the linker also needs the -m32 flag. Try these links to see if they help:

http://stackoverflow.com/questions/8421110/building-a-32-bit-app-in-64-bit-ubuntu http://stackoverflow.com/questions/3544245/turning-on-linker-flags-with-cmake