[ODE] Build of UNSTABLE fails on AMD-64

Rodrigo Hernandez kwizatz at aeongames.com
Fri Dec 2 15:09:29 MST 2005


Ok, like you said, the first problem is easily solved, I did add the 
flag, I am not sure if checks should be made to see if the flag is 
actually needed,
I know Linux x86 can handle the flag, and Windows just warns that the 
flag has no effect, if someone reports broken compilation because of the 
flag,
I'll write the propper checks.

The second issue, well, give me some time, it requires adding config.h 
and checking for a platform macro.

Cheers!

Peter Onion wrote:

>I just tried to build ode UNSTABLE on my new AMD_64 SuSE 10.0 machine.
>There are two problems....
>
>FIRST PROBLEM
>
>g++ -I../../include -I../../include   -g   -o libode.so -shared
>obstack.o collision_util.o array.o ode.o error.o odemath.o
>collision_kernel.o export-dif.o quickstep.o collision_quadtreespace.o
>rotation.o collision_space.o collision_std.o joint.o
>step.o collision_transform.o lcp.o stepfast.o mass.o testing.o mat.o
>timer.o matrix.o util.o memory.o misc.o fastldlt.o fastltsolve.o
>fastdot.o fastlsolve.o   -lstdc++ -lm -lpthread
>/usr/lib64/gcc/x86_64-suse-linux/4.0.2/../../../../x86_64-suse-linux/bin/ld: obstack.o: relocation R_X86_64_32 against `a local symbol' can not be used when making a shared object; recompile with -fPIC
>obstack.o: could not read symbols: Bad value
>collect2: ld returned 1 exit status
>make[2]: *** [libode.so] Error 1
>
>
>As gcc helpfully pointed out the addition of "-fPIC" to the flags in the
>Makefile.am in the ode src directory fixed it....
>
>SECOND PROBLEM
>if g++ -DHAVE_CONFIG_H -I. -I. -I../../include/ode   -g -g
>-I../../include -I../../include -g -MT test_space.o -MD -MP -MF
>".deps/test_space.Tpo" -c -o test_space.o test_space.cpp; \
>then mv -f ".deps/test_space.Tpo" ".deps/test_space.Po"; else rm -f
>".deps/test_space.Tpo"; exit 1; fi
>test_space.cpp: In function ‘void nearCallback(void*, dxGeom*,
>dxGeom*)’:
>test_space.cpp:127: error: cast from ‘void*’ to ‘int’ loses precision
>test_space.cpp:128: error: cast from ‘void*’ to ‘int’ loses precision
>make[2]: *** [test_space.o] Error 1
>
>
>The code in question is
>
> 124 static void nearCallback (void *data, dGeomID o1, dGeomID o2)
>    125 {
>    126   int i,j;
>    127   i = (int) dGeomGetData (o1);
>    128   j = (int) dGeomGetData (o2);
>    129   if (i==j)
>    130     printf ("collision (%d,%d) is between the same object
>\n",i,j);
>    131   if (!good_matrix[i][j] || !good_matrix[j][i])
>    132     printf ("collision (%d,%d) is incorrect\n",i,j);
>    133   if (test_matrix[i][j] || test_matrix[j][i])
>    134     printf ("collision (%d,%d) reported more than once\n",i,j);
>    135   test_matrix[i][j] = 1;
>    136   test_matrix[j][i] = 1;
>    137 }
>
>Since pointers and ints are nolonger the same size on AMD_64s this won't
>work anymore....  The pointers will either have to be used to actually
>point at something, or cast them to a long (OK until we all have 128 bit
>machines !).
>
>Peter
>
>
>_______________________________________________
>ODE mailing list
>ODE at q12.org
>http://q12.org/mailman/listinfo/ode
>  
>



More information about the ODE mailing list