Build Platform: Fedora Core 5 64-bit GCC version: 4.1.0 //////////////////////////////////////////////////////////////////////////////// /build/make/Makefile.vars :76 Change -march=i686 to -march=k8 Note: The k8 applies to AMD-64bit processors only. The compiled binaries will not work with Intel's 64bit extensions! :78 Same as above //////////////////////////////////////////////////////////////////////////////// /src/language/arSTLalgo.h Note: In debian unstable, the accumulate function is not found unless is also included. This can be done in /src/language/arSTLalgo.h right under the include. :8 (Inserted after line 7) #include //////////////////////////////////////////////////////////////////////////////// On a 64bit platform, pointers are now 64-bit and therefor should not be cast to a 32-bit int. Instead, pointer conversions like the one below should be casted to a long instead of an int. Even better, however, is to cast the -1 to a (void *). This way, the code becomes platform independent. /src/drivers/arSharedMemDriver.cpp :106 changed to: if (_shmFoB == (void *)-1){ :111 changed to: if (_shmWand == (void *)-1){ //////////////////////////////////////////////////////////////////////////////// The latest version of Freeglut requires glutInit to be called before any utility functions can be called. Adding this call to arGUIWindow.cpp fixes this problem but is not the most elegant solution. Better yet would be to simply use the functions from freeglut (released under a X-Consortium style license) to create a simple utility library for functions such as glSphereMesh. The license allows redistribution as long as the original copyright and license are accompanied. (Keeping it in a seperate library prevents any conflicts with the BSD-style license Syzygy is released under). The fix below is probably not in the best position, but it does fix the problem. /src/graphics/arGUIWindow.cpp :984 (After line 983, insert this) int jk = 0; glutInit(&jk, NULL); //////////////////////////////////////////////////////////////////////////////// /src/phleet/szgd.cpp Found this bug by having to debug after a segfault. string::find returns type string::size_type. It is incorrectly assumed that this is an unsigned int. (Though in other source files it is correct used as an string::size_type) The specification only requires it to be an unsigned integral type. On 64-bit linux it is an unsigned long. Therefore, it is better to use the real type and not make assumptions. :298 Changed to string::size_type pos; /src/language/arLogStream.cpp :195 Changed to string::size_type next = s.find('\n', current); Fedora Core 5, 64-bit GCC 4.1.0 //////////////////////////////////////////////////////////////////////////////// /src/drivers/arSharedMemoryDriver.cpp GCC 4.1 no longer allows name-injection of friend declarations by default. Line 171 fails to compile since ar_ShmDriverDataTask isnt defined. In /src/drivers/arSharedMemoryDriver.h :16 insert: void ar_ShmDriverDataTask(void*); /src/graphics/arGraphicsClient.h :35 insert: bool ar_graphicsClientPostSyncCallback(void*); /src/sound/arSoundClient.h :28 insert: bool ar_soundClientConsumptionCallback(void*, ARchar*); bool ar_soundClientActionCallback(void*); bool ar_soundClientNullCallback(void*); bool ar_soundClientPostSyncCallback(void*);